【Spring】【DI】【Bean对象注入属性的三个方式】【Autowired,Qualifier,Resource注解】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40315550/article/details/78935688

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;
展开阅读全文

没有更多推荐了,返回首页