【Spring】Bean的自动装配
程序员文章站
2022-11-30 15:27:35
自动装配是Spring满足bean依赖的一种方式!Spring会在上下文中自动寻找,并自动给bean装配属性!在Spring中三种装配的方式在xml中显示的配置在java中显示配置隐式的自动装配bean【重要】1.测试环境搭建:一个人有两个宠物pojo:2.ByName和ByType的自动装配byName:会自动在容器上下文中查找和自己对象set方法后面的值对应的beanID ....
- 自动装配是Spring满足bean依赖的一种方式!
- Spring会在上下文中自动寻找,并自动给bean装配属性!
在Spring中三种装配的方式
- 在xml中显示的配置
- 在java中显示配置
- 隐式的自动装配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.使用注解实现自动装配
使用注解的目的,使配置文件更干净!
要使用注解须知:
- 导入约束,context约束
- 配置注解的支持: 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
推荐阅读
-
02Spring基于xml的IOC配置--实例化Bean的三种方式
-
Spring 的 Bean 生命周期,11 张高清流程图及代码,深度解析
-
Spring 学习指南 第三章 bean的配置 (未完结)
-
Spring中bean对象的生命周期
-
完美解决spring websocket自动断开连接再创建引发的问题
-
JSP Spring 自动化装配Bean实例详解
-
一个用于MyBatis的辅助页面,自动生成实体,mapper,impl,dao,注册spring,mybatis的小玩意
-
Linux系统实现ansible自动化安装配置httpd的方法
-
谈谈我对Spring Bean 生命周期的理解
-
Spring Bean的属性注入方式