<reference id="coderService" interface="com.ponder.ICoder" timeout="0"/> <bean id="processor" class="com.ponder.Processor"> <property name="coder" ref="coderService"/> </bean>
上例中,reference节点定义了对一个OSGI服务的引用,然后在bean节点内用property子节点将该服务引用注入bean中,注入是blueprint通过bean的setCoder(com.ponder.ICoder)这个setter方法实现的。
注入基础类型的常量:
<bean id="processor" class="com.ponder.Processor"> <property name="price" value="19.99"/> </bean>
上例将19.99这个值注入bean中,用的是setPrice这个setter方法,那么它注入的是数值19.99还是字符串“19.99”呢?这个就要看setter方法的参数类型了,这个你懂的... ...。
注入非基础类型的常量:
<bean id="processor" class="com.ponder.Processor"> <!-- boolean --> <property name="boolvar"> <value type="java.lang.boolean">true</value> </property> <!-- BigInteger --> <property name="bigIntVar"> <value type="java.lang.BigInteger">823899238</value> </property> </bean>
bean的注入:
<!-- 待注入的bean1 --> <bean id="bean1" class="com.ponder.bean1"/> <!-- 注入bean1的bean(processor) --> <bean id="processor" class="com.ponder.Processor"> <property name="mybean" ref="bean1"/> </property> </bean>
集合的注入:
<bean id="processor" class="com.ponder.Processor"> <!--数组 --> <property name="arrayvar"> <array value-type="java.lang.String"> <value>hello</value> <value>world</value> <value>!</value> </array> </property> <!-- list --> <property name="listvar"> <list value-type="java.lang.String"> <value>hello</value> <value>world</value> <value>!</value> </list> <!-- set --> <property name="setvar"> <set value-type="java.lang.String"> <value>hello</value> <value>world</value> <value>!</value> </set> </property> </bean>
properties的注入:
<bean id="processor" class="com.ponder.Processor"> <property name="propsvar"> <props> <prop key="hello">hello</prop> <prop key="world" value="world" /> </props> </property> </bean>
MAP的注入:
<bean id="processor" class="com.ponder.Processor"> <property name="mapvar"> <map> <!-- 普通 --> <entry key="hello" value="world" /> <!-- 对象引用作为键 --> <entry key-ref="obj-ref" value="value1"/> <!-- 对象引用作为值 --> <entry key="key1" value-ref="value-ref"/> <!-- 键和值都是引用 --> <entry key-ref="obj-ref" value-ref="value-ref"/> <!-- 非基础类型的值 --> <entry key="key2"> <value type="java.lang.BigInteger">92873873242323</value> </entry> <!-- 非基础类型的键 --> <entry value="value2"> <key type="java.lang.BigInteger">92873873242323</value> </entry> <!-- 键和值都非基础类型 --> <entry> <key type="java.lang.Long">2323</value> <value type="java.util.List"> <list value-type="java.lang.String"> <value>hello</value> <value>world</value> <value>!</value> </list> </value> </entry> </map> </property> </bean>
Blueprint运行时环境上下文的注入:
<bean id="processor" class="com.ponder.Processor"> <!-- BundleContext --> <property name="bundlecontext" ref="blueprintBundleContext"/> <!-- Bundle --> <property name="bundle" ref="blueprintBundle"/> <!-- blueprint容器--> <property name="container" ref="blueprintBundleContainer"/> <!-- 类型转换器 --> <property name="converter" ref="blueprintBundleConverter"/> </bean>