ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring-bean的自动装配

2021-11-27 14:01:04  阅读:124  来源: 互联网

标签:装配 Resource Autowired Spring private bean 自动


  • 自动装配是Spring满足bean依赖的一种方式

  • Spring会在上下文中自动寻找,并自动给bean装配属性

在Spring中有三种装配方式

  • xml配置

  • java配置

  • 隐式的自动装配bean【重要】

7.1、ByName自动装配

在容器上下文中查找,和自己对象名set后面的值对应的bean id

<bean id="cat" class="com.mosang.pojo.cat"/>
<bean id="dog" class="com.mosang.pojo.dog"/>
​
<bean id="person" class="com.mosang.pojo.person" autowire="byName">
    <property name="name" value="小墨"/>
</bean>

7.2、ByType自动装配

bytype:在容器上下文中查找,和自己对象属性类型相同的bean,id可省略

<bean class="com.mosang.pojo.cat"/>
<bean class="com.mosang.pojo.dog"/>
​
<bean id="person" class="com.mosang.pojo.person" autowire="byType">
    <property name="name" value="小墨"/>
</bean>

小结:

  • byname时需要保证所有bean的id唯一,并且bean需要和自动装配的属性的set方法的值一致

  • bytype时需要保证所有bean的class唯一,并且bean需要和自动装配的属性的类型一致

7.3、使用注解实现自动装配

@Autowired注解

  1. 导入约束

    context约束

  2. 配置注解支持

     <context:annotation-config/>
    @Autowired
    private cat cat;
    @Autowired
    @Qualifier(value = "dog11")
    private dog dog;
    private String name;
    <?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/>
        <bean id="cat" class="com.mosang.pojo.cat"/>
        <bean id="dog" class="com.mosang.pojo.dog"/>
        <bean id="dog11" class="com.mosang.pojo.dog"/>
        <bean id="person" class="com.mosang.pojo.person" autowire="byType"/>
    </beans>

    直接在属性上使用即可,也可以在set方式上使用.

    使用autowired可以不写set方法,前提是容器中存在且符合byname

    @Autowired智能识别

  • 当注入IOC容器中该类型只有一个时,通过bytpe装配

  • 当注入容器时存在多个同一类型的对象时,根据byname装配

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解完成时,我们可以使用@Qualifier(value="xxx")去配置@Autowired使用,指定唯一的bean对象注入

@Resource注解

@Resource
private cat cat;
@Resource(name = "dog11")
private dog dog;
private String name;

@Resource和@Autowired的区别:

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

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

  • @Resource默认通过byName的方式实现,如果找不到名字,则通过byType实现,如果两个都找不到的情况下,就报错!

  • 执行顺序不同,@Autowired先byType,@Resource先byName

标签:装配,Resource,Autowired,Spring,private,bean,自动
来源: https://blog.csdn.net/xmosang/article/details/121576198

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有