当前位置: 移动技术网 > IT编程>开发语言>Java > 【Spring】Bean的自动装配

【Spring】Bean的自动装配

2020年07月12日  | 移动技术网IT编程  | 我要评论
  • 自动装配是Spring满足bean依赖的一种方式!
  • Spring会在上下文中自动寻找,并自动给bean装配属性!

在Spring中三种装配的方式

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

1.测试

环境搭建:一个人有两个宠物
pojo:
在这里插入图片描述

在这里插入图片描述


2.ByName和ByType的自动装配

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

在这里插入图片描述

 <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。

在这里插入图片描述

<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.使用注解实现自动装配

使用注解的目的,使配置文件更干净!
在这里插入图片描述

要使用注解须知:

  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注解
在这里插入图片描述
如果出现下图的情况,@Autowired注解可以与@Qualifier注解配合使用。如下下图。
在这里插入图片描述
在这里插入图片描述
@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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网