Bean的自动装配(Autowired)
Bean的自动装配(Autowired)
自动装配是Spring满足bean依赖的一种方式
Spring会在上下文中自动寻找,并自动给bean装配属性
在Spring中有三种自动装配的方式
在xml中显示的配置
在java中显示配置
隐式的自动装配
Person类
public class Person {
private Dog dog;
private Cat cat;
private String name;
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
byName
<?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
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="cat" class="Cat"/>
<bean id="dog" class="Dog"/>
<bean id="person" class="Person" autowire="byName">
</bean>
</beans>
会自动在容器上下文中差找,和自己对象set方法后面的值对应bean id
byTyep
<?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
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="cat" class="Cat"/>
<bean id="dog222" class="Dog"/>
<bean id="person" class="Person" autowire="byType">
</bean>
</beans>会自动在容器上下文中差找,和自己对象属性类型相同的bean,但只有保证全局只有一个时才能运行,否则会报错
// 因为出现了两个dog type所以会报错
<bean id="cat" class="Cat"/>
<bean id="dog222" class="Dog"/>
<bean id="dog2" class="Dog"/>
小结
byName的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set的值一致
byType的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致
使用注解进行装配
xml注解包的导入
开启注解的支持
<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
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>// 开启注解的支持
<!-- bean definitions go here -->
</beans>
Person类
import org.springframework.beans.factory.annotation.Autowired;
public class Person {
@Autowired
private Dog dog;
@Autowired
private Cat cat;
private String name;
public Dog getDog() {
return dog;
}
public Cat getCat() {
return cat;
}
public String getName() {
return name;
}
}
xml文件
<?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
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<bean id="cat" class="Cat"/>
<bean id="dog" class="Dog"/>
<bean id="person" class="Person"/>
</beans>
@Autowired直接在属性上使用即可,也可以在set方式上使用
使用@Autowired我们可以不用编写Set方法,前提是你这个自动装配的属性在IOC(Spring)容器中存在,且符合名字byName
扩充
@Nullable // 字段标记了这个注解,表示这个字段可以为null
@Autowired(required = false)
// 如果显式定义了Autowired的required实行为false,说明这个对象可以为null,否则不允许为空
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候,我们可以使用@Qualifier(value="xxx")去配置@Autowired的使用,指定一个唯一的bean对象注入
public class Person {
@Autowired
@Qualifier(value="cat111")
private Dog dog;
@Autowired
@Qualifier(value="dog222")
private Cat cat;
private String name;
}
@Resource注解
public class Person{
@Resource(name = "cat2")
private Cat cat;
@Resource()
private Dog dog
}
小结:
@Resource和@Autowired的区别
都是用来自动装配的,都可以放在属性字段上
@Autowired通过byType的方式实现,而且必须要求这个对象存在
@Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现,如果两个都找不到才报错
执行顺序不同: @Autowired通过byType的方式实现
Bean的自动装配(Autowired)的更多相关文章
- 20、自动装配-@Autowired&@Qualifier&@Primary
20.自动装配-@Autowired&@Qualifier&@Primary 自动装配:Spring 利用依赖注入(DI),完成对IOC容器中各个依赖关系赋值 20.1 @Autowi ...
- Spring——自动装配(@Autowired/@Profile/底层组件)
本文介绍Spring中关于自动装配的方法和规则,以及@Profile动态激活的用法和一个例子. 一.@Autowired自动装配 @Autowired注解可以加在构造器.属性.方法.方法参数上. 自动 ...
- Spring(三):bean的自动装配
Bean的自动装配 自动装配是Spring满足bean依赖的一种方式. Spring会在上下文中自动寻找,并自动给bean装配属性 Spring中三种装配方式 在xml中显式的配置. 在java中显式 ...
- Spring-04 Bean的自动装配
Spring-04 Bean的自动装配 Bean的自动装配 1.自动装配说明 自动装配是使用spring满足bean依赖的一种方法. spring会在应用上下文中为某个bean寻找其依赖的bean. ...
- Spring学习03(Bean的自动装配)
6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...
- bean的自动装配,使用注解开发,使用java的方式配置Spring
bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种装配的方式 在xml中显示的配置 在java中 ...
- Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...
- spring实战二之Bean的自动装配(非注解方式)
Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...
- Spring bean的自动装配属性
bean的自动装配属性能简化xml文件配置. bean 的自动装配属性分为四种: 1.byName 2.byTyoe 3.constructor 4. autodetect byName: 它查找配置 ...
- 自动装配[@Autowired]的歧义性
在使用@Autowired自动装配时,如果一个接口有多个实现类,那么自动装配就会出现错误,因为Spring无法判断到底要装配哪个实现类实例(bean). 1.可以使用@Qualifier(" ...
随机推荐
- nvm在windows下安装与使用
1.卸载本地已经安装的所有node 2.nvm下载 下载地址https://github.com/coreybutler/nvm-windows ,选择nvm-noinstall.zip 放在本地盘, ...
- C++ 用运算符重载 实现复数相加
#include "stdafx.h" #include <iostream> using namespace std; class Complex {public: ...
- 网页元素间距测量(better rule插件的使用)
我们在测试UI界面的时候,需要测量各元素大小及元素之间的距离.元素大小,使用F12可以简易的得到数据,但是元素的间距相对来说会比较复杂.这里推荐一款chrome插件better rule,帮助大家测量 ...
- 项目引入fastclick 导致ios中input需要多次点击才能触发focus
main.js中引入之后的修改 import FastClick from "fastclick"; FastClick.prototype.focus = function (t ...
- HTML第四章作业
学生实践4.1.3 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8" ...
- python+基本3D显示
想要将双目照片合成立体图实现三维重建,完全没有头绪.但是对三维理解是必须的.所以将以前在单片机上运行的 3D画图 程序移植到python上.效果如下: 没有用numpy.openGL等,只用了纯mat ...
- MacOS使用iTerm2 tab不区分大小写解答
打开控制台 输入 vim ~/.zshrc 按下 i 之后 // i == insert插入字符 粘贴以下代码 复制到该文件中 autoload -Uz compinit && co ...
- 在VS中使用Wind数据终端API的经验(一)
因工作需要,使用vs2019来调用Wind金融终端API数据接口.具体步骤按照wind的帮助文档一步步做下来.这里提一下和帮助文档不同的地方. Windows Console APP下,编译项目后出现 ...
- Microsoft SQL Server,错误: 3023
对数据库的备份.文件操作(如 ALTER DATABASE ADD FILE)以及加密更改必须序列化.请在当前备份或文件操作完成后重新发出该语句.ALTER DATABASE 语句失败. (Micro ...
- Hive使用Tez作为计算引擎,hive启动报错
1.问题描述: (1)问题示例: 1)hive使用配置文件hive-site.xml配置tez为计算引擎,hive登录报错: [Hadoop@master Tmp]$ hiveHive Session ...