=========================================== Spring IoC注解配置之Autowired和Resource注解 =========================================== 1 Autowired注解 在cn.tedu.annotationioc.beans包中添加Subject类: @Component(value = "subject") --------- public class Subject { | private String name = "Java"; | | public String getName() { | return name; | } | | public void setName(String name) { | this.name = name; | } | |自 @Override |动 public String toString() { |装 return "Subject{" + |配 "name='" + name + '\'' + | '}'; | } | } | | 修改Student: | | @Component(value = "student") | public class Student { | ... | @Autowired | private Subject subject; <--------- ... public Subject getSubject() { return subject; } public void setSubject(Subject subject) { this.subject = subject; } ... @Override public String toString() { return "Student{" + "number='" + number + '\'' + ", name='" + name + '\'' + ", gender='" + gender + '\'' + ", age=" + age + ", enrollment=" + enrollment + ", subject=" + subject + '}'; } ... } 测试: public class SpringTest { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Student student = context.getBean("student", Student.class); System.out.println(student); } } Student{number='1001', name='张飞', gender='男', age=20, enrollment=Mon Feb 14 10:23:50 CST 2022, subject=Subject{name='Java'}} Autowired注解用于声明此属性自动装配,相当于bean标签的autowire属性: - 按类型匹配,无匹配或多匹配则抛出异常 - required=false,无匹配或多匹配则放弃装配,不抛出异常,属性取null Autowired注解也可以用在Set方法上: @Component(value = "student") public class Student { ... private Subject subject; ... @Autowired public void setSubject(Subject subject) { this.subject = subject; } ... } 这时可以结合使用Qualifier注解: @Component(value = "student") public class Student { ... private Subject subject; ... @Autowired public void setSubject(@Qualifier("subject") Subject subject) { this.subject = subject; } ... } 可以在Qualifier注解的参数中指定注入源的名字,若类型不一致则抛出异常。 例程:AnnotationIoC 2 Resource注解 public class Student { ... @Resource private Subject subject; ... } Resource注解并非由Spring提供,而是源自J2EE,依赖于“Javax Annotation API”。其功能与Autowired注解类似,但不完全相同: - 优先按名字匹配,名字匹配但类型不匹配则抛出异常 - 没有名字匹配的,再按类型匹配,无匹配或多匹配则抛出异常 例程:AnnotationIoC