0.前言
- 依赖注入分2个步骤,第一个步骤是bean的创建。第2个步骤是bean的各种属性注入。
- Spring关注于对象。。也就是静态类属性不太好注入。。就是说Spring在静态类属性和单例模式中选择了单例模式
1. 实例化bean的3种方法
1.1 构造器实例化bean
- 这个比较简单,指明class就可以创建一个bean
- 通过调用class的构造函数实例化bean,当然可以指明构造函数的参数。具体见后文的bean属性注入。
- 其中id可以省略---如果这个bean创建后可以通过list等方式引用。
<bean id="appConfig" class="MissionAdmin.AppConfig"/>
1.2 静态工厂方式实例化
- 这个主要是调用类的静态工厂方法来创建一个bean。
- 常用于单例模式。
- 需要指定一个静态工厂方法
- 如下例子,会调用
MissionAdmin.AppConfig.getinstance()
方法来返回一个bean
<bean id="appConfig" class="MissionAdmin.AppConfig" factory-method="getInstance">
1.3 实例工厂方式实例化
- 比较类似静态工厂方法,但是此时会先实例一个工厂,在调用该工厂的工厂方法来创建一个bean
- 需要先指定一个实例工厂,并指定实例工厂的实例方法。
- 如下例子,先创建一个id为myBeanFactory的工厂。然后调用这个工厂实例方法来创建一个bean。
- 使用时,直接
applicationContext.getBean()
即可,Spring会自动创建实例工厂。
<bean id="myBeanFactory" class="com.mengma.instance.factory.MyBeanFactory" />
<bean id="user1" factory-bean="myBeanFactory" factory-method="createBean" />
2. bean的各种属性注入
2.1 setter方式
- 指明property子元素的name即可。会自动访问bean的setter方法来注入属性值
- bean必须符合规范。即各种setter等的命名满足规范等
- 可以通过
ref
值来指明另外一个对象
- 通过
value
指明一个常量值
<bean class = "">
<property name="missingOutage" value="">
<property name="missingOutage" ref="">
</bean>
2.2构造函数方式
- index 属性指定构造参数的序号(从 0 开始)
- type 属性指定构造参数的类型
<bean class = "">
<constructor-arg name="id" value="1"/>
<constructor-arg index="0" value="1" type = ""/>
</bean>
3. List集合、数组等的注入
- 可以用ref指明一个对象引用或value指明一个常量
- 或者直接用bean嵌套,创建一个bean。此时bean的id属性可以省略
<bean>
<property name="aList">
<list>
<ref bean="user1"/>
<ref bean="user2"/>
<bean/>
</list>
</property>
</bean>
<property name="missingControlLevel">
<array>
<value>车间级</value>
<value>班组级</value>
</array>
</property>
参考文章
1.Spring实例化Bean的三种方法
2.spring注入List集合
网友评论