@Autowired用来注解需要注入的类型,这里有一点值得提一下,Spring2.5的注解不支持基本类型的注入,如果涉及到基本类型的注入仍然要采用XML配置,个人认为这样做是很正确的,基本类型都是的注入是一些固定的值,如果使用注解来完成注入,那么使得代码和相应的值黏合在一起,不便于修改。@Autowired来注解DI时,如果有多个同类型的class,则可以结合@Qualifier注解来指定注入Bean的名称,如:
IUser接口: public interface IUser { public String describe(); }
2个实现类:
Father: @Service public class Father implements IUser { private String name = "dabing"; public String describe() { // TODO Auto-generated method stub return "父亲是:" + this.name; } }
Son: @Service public class Son implements IUser { private String name = "xiaobing"; public String describe() { // TODO Auto-generated method stub return "儿子是:" + this.name; } }
现在写一个类来测试一下注入情况:
Family: @Service public class Family { @Autowired private IUser user; public String toString() { return "家庭成员:" + user.describe(); } }
在Family中需要注入一个IUser类型,这个时候如果测试Family类是否注入,肯定会报错如下:
expected single matching bean but found 2: [father, son]
表示有多个同样的类型,这个时候@Qualifier就显的十分重要了,增加注解最终如下:
@Service public class Family { @Autowired @Qualifier("father") private IUser user; public String toString() { return "家庭成员:" + user.describe(); } }
这个时候使用@Qualifier注解显示地告诉Spring,我现在需要的是名称为father且类型为IUser的Bean,运行起来当然就一切正常了。