欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Spring】Bean的自动装配

程序员文章站 2022-05-03 10:01:42
自动装配是Spring满足bean依赖的一种方式!Spring会在上下文中自动寻找,并自动给bean装配属性!在Spring中三种装配的方式在xml中显示的配置在java中显示配置隐式的自动装配bean【重要】1.测试环境搭建:一个人有两个宠物pojo:2.ByName和ByType的自动装配byName:会自动在容器上下文中查找和自己对象set方法后面的值对应的beanID ....
  • 自动装配是Spring满足bean依赖的一种方式!
  • Spring会在上下文中自动寻找,并自动给bean装配属性!

在Spring中三种装配的方式

  1. 在xml中显示的配置
  2. 在java中显示配置
  3. 隐式的自动装配bean【重要】

1.测试

环境搭建:一个人有两个宠物
pojo:
【Spring】Bean的自动装配

【Spring】Bean的自动装配


2.ByName和ByType的自动装配

byName:会自动在容器上下文中查找和自己对象set方法后面的值对应的beanID

【Spring】Bean的自动装配

 <bean id="cat" class="com.peach.pojo.Cat"></bean>
    <bean id="dog" class="com.peach.pojo.Dog"></bean>
    <bean id="dog3" class="com.peach.pojo.Dog"></bean>

    <!--byName:会自动在容器上下文中查找和自己对象set方法后面的值对应的beanID-->
    <!--byType:会自动在容器上下文中查找和自己对象属性类型对应相同的beanID 只能有一种类型-->
    <bean id="people" class="com.peach.pojo.People" autowire="byName">
        <property name="name" value="peach"/>
    </bean>
byType:会自动在容器上下文中查找和自己对象属性类型对应相同的beanID,但是byType不允许同种类型有两个,如下图:这是不允许的。但是byType的好处是,可以在bean属性中不加id。

【Spring】Bean的自动装配

<bean id="cat" class="com.peach.pojo.Cat"></bean>
    <bean id="dog3" class="com.peach.pojo.Dog"></bean>

    <!--byName:会自动在容器上下文中查找和自己对象set方法后面的值对应的beanID-->
    <!--byType:会自动在容器上下文中查找和自己对象属性类型对应相同的beanID 只能有一种类型-->
    <bean id="people" class="com.peach.pojo.People" autowire="byType">
        <property name="name" value="peach"/>
    </bean>

小结

  • byName的时候,需要保证所有的bean唯一,并且这个bean需要和自动注入的属性的set方法的值一致!
  • byType的时候,需要保证所有的bean的class唯一,并且这个bean需要和自动注入的属性的类型的值一致!

3.使用注解实现自动装配

使用注解的目的,使配置文件更干净!
【Spring】Bean的自动装配

要使用注解须知:

  1. 导入约束,context约束
  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>

属性或者set方法上使用@Autowired注解
【Spring】Bean的自动装配
如果出现下图的情况,@Autowired注解可以与@Qualifier注解配合使用。如下下图。
【Spring】Bean的自动装配
【Spring】Bean的自动装配
@Qualifier

  • @Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配

  • @Qualifier不能单独使用。

@Resource 【可能更常见】

  • @Resource如有指定的name属性,先按该属性进行byName方式查找装配;

  • 其次再进行默认的byName方式进行装配;

  • 如果以上都不成功,则按byType的方式自动装配。

  • 都不成功,则报异常。

@Resource(name = "cat1")
    private Cat cat;
    @Resource
    private Dog dog;
    private String name;

小结

@resource 和 @ autowired 的区别

  • 都是用来自动装配的,都可以放在属性字段上
  • @autowired通过byType的方式实现,而且必须要求这个对象存在!【常用】
  • @Resource默认通过byName方式实现,如果找不到名字,则通过bytype实现!若都找不到则报错。【常用】
  • 执行顺序不同:@autowired通过byType的方式实现

本文地址:https://blog.csdn.net/alovelypeach/article/details/107281177