原文链接 依赖注入 javax.inject中@Inject、@Named、@Qualifier和@Provider用法
对于原博文的内容中的Person类和House类,我自己在下面测试了结果。
House类
@Named
public class House {
@Inject
private Person person;
public House(){
System.out.println("This is House construction function");
}
public Person getPerson() {
return person;
}
}
Person类
@Named
public class Person {
private String name;
public Person(){
System.out.println("This is construction function");
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
测试类方法
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:application.xml");
House house = (House) ac.getBean("house");
Person p = house.getPerson();
p.setName("张三"); System.out.println(house.getPerson().getName());
House house2 = (House) ac.getBean("House");
结果:
This is House construction function
This is construction function
张三
Exception in thread “main”
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘House’ available
针对原博文提出的
@Named
@Named和Spring的@Component功能相同。@Named可以有值,如果没有值生成的Bean名称默认和类名相同。
其实是有错误的,我的测试方法中,使用 House 和 house得到House的实例对象类,只有 house可以得到。所以,@Named的默认值应该是类的首字母小写的值。
另外,对于类中包含String等基本类型,不需要@Inject来标注,更不需要get和set方法。