0
点赞
收藏
分享

微信扫一扫

Spring学习(七)

路西法阁下 2022-03-18 阅读 44

7. Bean的自动装配

  • 自动装配是Spring满足bean依赖的一种方式
  • Spring会在上下文中自动寻找,并自动给bean装配属性

在Spring中存在三种装配方式

  1. 在xml中显式配置

  2. 在java中显式配置

  3. 隐式的自动装配(关键)

    • <!--
          byName:会自动在容器上下寻找,和自己对象中set方法后面跟的名词对应的bean,存在相同名字时不可用
          byType:会自动在容器上下寻找,和自己对象属性类型对应的bean,存在相同对象时不可用
          -->
      

7.1 测试装配

环境搭建:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="cat" class="com.Yurrize.pojo.Cat"></bean>
    <bean id="dog" class="com.Yurrize.pojo.Dog"></bean>

    <bean id="people" class="com.Yurrize.pojo.People">
        <property name="name" value="Yurrize"></property>
        <property name="cat" ref="cat"></property>
        <property name="dog" ref="dog"></property>
    </bean>
</beans>

7.2 ByName自动装配

<!--byName:会自动在容器上下寻找,和自己对象中set方法后面跟的名词对应的bean,存在相同名字时不可用-->
<bean id="people" class="com.Yurrize.pojo.People" autowire="byName">
    <property name="name" value="Yurrize"></property>
</bean>

7.3 ByType自动装配

<!--byType:会自动在容器上下寻找,和自己对象属性类型对应的bean,存在相同对象时不可用-->
<bean id="people" class="com.Yurrize.pojo.People" autowire="byType">
    <property name="name" value="Yurrize"></property>
</bean>

小结:

  • 使用ByName的时候,需要保证所有的bean的id值唯一2,并且bean需要和自动注入的属性的set方法后面的值保持一致。
  • 使用ByType的时候,需要保证所有的bean的class唯一,并且bean需要和自动注入的属性类型一致。

7.4 使用注解实现自动装配

jdk1.5支持注解,Spring2.5开始支持注解,大部分时间使用注解进行开发。

要使用注解:

  1. 导入约束

  2. 配置注解的支持: context:annotation-config/

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               https://www.springframework.org/schema/beans/spring-beans.xsd
                               http://www.springframework.org/schema/context
                               https://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:annotation-config/>
    
    </beans>
    

    @Autowired 直接在类或者set方法上使用,使用后set方法可以忽略(前提是IOC容器中存在,且与名字对应,ByName)。

    如果@Autowired自动装配无法通过一个注解完成时,可以使用@Qualifier(value=“xxx”)指定唯一的一个bean对象注入。

    @Resource(name="xxx");//可以代替上面两个标签
    

小结:

@Autowired和@Resource的区别:

  • 都是用来自动装配的,都可以放在属性字段上

  • @Autowired通过ByType的方式实现,且必须要求对象存在

  • @Resource默认通过ByName的方式实现,如果找不到名字,则通过ByType方式实现!如果两种自动装配的方式都无法找到bean对应的对象,则报错

  • 执行顺序不同:

    @Autowired通过ByType的方式实现

    @Resource默认通过ByName的方式实现

举报

相关推荐

0 条评论