欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

osgi之blueprint.xml注入bean

程序员文章站 2022-04-28 10:00:22
...

摘要 在osgi中服务的使用有多种方式,如使用传统的注册式服务,就是我们之前中example不断使用的使用方式,还是osgi中的声明式服务,还有著名的ipojo等等,但在这里值得花一番笔墨来讲解的应该是blueprint,说到blueprint,务必需要提及一下spring,在个人印象中,spring框架几乎成为了java这么多框架中最为有名的一个,传统上提出的ssh,几乎就只剩下spring一个还非常强力的存活着,而且本身提供的功能也越来越丰富,子项目中springboot也快成为业界微服务一大选择,而在osgi中,spring最初也有所涉及,为spring dm,blueprint产生的规范便是起源于spring dm,随后好像spring dm没有继续发展,但是blueprint却是一直存在目前,Blueprint规范主要有两个实现:Aries blueprint和Gemini blueprint,它们分别来自Apache和Eclipse两个开源组织,具体的地址如下:http://aries.apache.org/documentation/tutorials/blueprinthelloworldtutorial.html

一. blueprint.xml运用

在osgi环境下,直接在resource目录下新建OSGI-INF.blueprint目录,在此目录下新建blueprint.xml即可,这个xml名字随便取,如图

osgi之blueprint.xml注入bean

二 . 注入bean

在这里,我会把基于注解配置,也顺便提一下,我们先从xml配置开始,如下

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-timeout="0">

    <!--import service-->
    <!-- 
        引入进来的服务接口
        filter: 过滤条件
    -->
    <reference id="daoManagentSvr" interface="com.yf.af.data.DaoManagement" />
    <reference id="dataSource" interface="javax.sql.DataSource" filter="(dataSourceName=yfdb)" />


    <bean id="messageQueue" class="com.yf.af.comm.model.MessageQueue"/>

    <!--
        scope:单例
        init-method:模块加载时执行的方法
        destroy-method: 模块退出时执行的方法
    -->
    <bean id="advServiceBean" class="com.yf.af.comm.service.impl.AdvServiceImpl" scope="singleton" init-method="init" destroy-method="destroy">
        <property name="messageQueue" ref="messageQueue" />
        <property name="daoManagement" ref="daoManagentSvr" />
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- Export-Service-->
    <!--放出去的接口服务-->
    <service id="advService" ref="advServiceBean" interface="com.yf.af.comm.service.AdvService"/>

</blueprint>

配置格式和spring .xml很类似,一些的重要的概念在注释里面说了

哦,对了,顺便提一下,在AdvServiceImpl实现里面怎么调用property ,我们就拿daoManagement这个属性写一下

    private DaoManagement daoManagement;

    public void setDaoManagement(DaoManagement daoManagement) {
        this.daoManagement = daoManagement;
    }

这样,实现里就可以使用daoManagement里面的方法了
基于xml配置的就差不多这些了

在来看一下基于注解的

所需jar

            <dependency>
                <groupId>javax.inject</groupId>
                <artifactId>javax.inject</artifactId>
                <version>1</version>
                <optional>true</optional>
            </dependency>

            <dependency>
                <groupId>org.apache.aries.blueprint</groupId>
                <artifactId>blueprint-maven-plugin-annotation</artifactId>
                <version>1.1.0</version>
                <optional>true</optional>
            </dependency>

            <dependency>
                <groupId>org.ops4j.pax.cdi</groupId>
                <artifactId>pax-cdi-api</artifactId>
                <version>1.0.0.RC2</version>
                <optional>true</optional>
           </dependency>

上面只是针对注解的,其他的jar省略

@Singleton
@Named("advServiceBean")
@OsgiServiceProvider
public class AdvServiceImpl implements AdvService {

    @Inject
    @OsgiService
    private DaoManagement daoManagement;

    @Inject
    @OsgiService(filter = "(dataSourceName=yfdb)")
    private javax.sql.DataSource dataSource;

    @PostConstruct
    public void init(){
       // 模块加载时运行
    }

    @PreDestroy
    public void destroy(){
       // 模块退出时运行
    }  
}

上面的配置大致说一下

@Inject 按类型注入bean
@OsgiService 创建对OSGi服务的引用。这里可以使用过滤器。
@OsgiServiceProvider 给指定的接口发布bean作为OSGi服务
@Named 命名bean

注解配置可以参考一下 http://aries.apache.org/modules/blueprint-maven-plugin.html

使用注解,当你项目打包编译时,它会自己自动生成配置文件,如下图
只不过我是在另外一个类,做的测试,在这里只是说明可以在这里查看

osgi之blueprint.xml注入bean

好了,先说到这里,摘要部分的说明是http://blog.csdn.net/u012734441/article/details/51818300 复制的

相关标签: osgi