JAVA全系列 教程
3762个小节阅读:7089.1k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
本小节内容其实就是注解方式实现如何把Bean注入到当前实例。
@Autowired功能是从IoC容器中把其他Bean注入进来。有以下特点:
创建一个学生类,并放入到IoC容器中。
xxxxxxxxxx
@Component
public class Student {
}
创建一个老师类,类中包含学生属性。使用@Autowired注解注入
xxxxxxxxxx
@Data
@Component
public class Teacher {
@Autowired
private Student stu;
}
测试效果
xxxxxxxxxx
@Test
void annotion(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-annotation.xml");
Teacher teacher = ac.getBean("teacher", Teacher.class);
System.out.println(teacher);
}
发现输出结果中,Teacher中stu属性已经被注入了。
在配置文件中再配置一个bean.(注:目前所学,使用注解没有办法给一个类配置两个Bean,只能结合XML)
xxxxxxxxxx
<bean id="stu2" class="com.bjsxt.annotation.Student"></bean>
再次运行会报错。控制台提示,无法注入,希望有一个Student类型,但是发现了两个,分别叫做student,stu2
xxxxxxxxxx
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.bjsxt.annotation.Student' available: expected single matching bean but found 2: student,stu2
at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1383)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1325)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:709)
... 86 more
如果修改Teacher中属性名为student或stu2,会发现又可以成功注入了。
如果不希望Teacher中Student属性名和IoC容器中Bean的名称相同,可以使用@Qualifier注解指定需要注入的Bean名称。
xxxxxxxxxx
@Data
@Component
public class Teacher {
@Autowired
@Qualifier("stu2")
private Student stu;
}