Bean的属性注入的三个方式
向dao类注入sessionFactory属性
1.使用<property>
可以注入String,list等+bean对象
<bean id="sessionFactory" class="XXX.XXX.HibernateTransactionManager" />
<bean id="employeeDAO" class="dao.impl.EmployeeDAOImpl" >
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
2.使用注解@Autowired
只可以注入Spring中的bean对象
<bean id="sessionFactory" class="XXX.XXX.HibernateTransactionManager" />
<bean id="employeeDAO" class="dao.impl.EmployeeDAOImpl" />
public class EmployeeDAOImpl{
@Autowired
private SessionFactory sessionFactory;
}
3.parent属性+抽象bean方式
适用于,多个bean对象要注入相同的属性,为这些属性集中声明一个抽象bean
可以注入String,list等+bean对象
bean对象 继承于 抽象bean
- 抽象bean:abstract=”true”,且没有class属性
- bean对象:parent=”抽象bean”
<bean id="baseDAO" abstract="true">
<property name="XXX" ref="XXX"/>
<property name="XXX" value="XXX"/>
``````
</bean>
<bean id="employeeDAO" class="third.EmployeeImplDAO" parent="baseDAO"/>
@Autowired注解
- 声明使用注解(省略context的命名空间)
<context:annotation-config/>
在启动Spring容器时候,会解析bean的class类中是否有Autowired注解,若有,根据该字段的类型来注入属性. - 使用位置
在bean类的字段或者setter方法上
@Autowired
private SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory=sessionFactory;
}
- requred属性
true:默认值,使用注解,容器中又没有对应的bean,就报错
false:当Spring容器中有该字段对应的bean对象,就取,没有就不取(不会报错).
@Autowired(requred=false)
private SessionFactory sessionFactory;
- @Qualifier(“id值”)
需要配合@Autowired使用,
作用:当bean容器的声明了两个SessionFactory类的bean对象时候.其id为s1 ,s2.只用@Autowired是无法准确取bean对象,需要配合@Qualifier(“id值”)寻找.
@Autowired //声明去容器取值
@Qualifier("s1") //声明按id方式取值
private SessionFactory sessionFactory;
@Autowired与@Resource的区别
@Autowired:是Sping框架的注解,可以取Spring容器中隐藏的<bean>
对象
@Resource(name=”id值”):是j2ee规范,作用与Autowired相同,但是不能取Spring隐藏的<bean>
对象.
隐藏的<bean>
对象:我们写的Spring的配置文件中,并没有配置ApplictionContext的<bean>
,但是取可以通过@Autowired取其bean对象,是因为Spring框架隐藏了.
@Autowired //成功取值
private ApplictionContext ctx;
@Resource //失败
private ApplictionContext ctx;