前面讲过使用注解配置bean,那么,两个不同类之间如何在此基础山建立关联呢?
Spring中提供了自动装配注解的实例:@Autowired、@Resource和@Inject
一、@Autowired
@Autowired可用于构造器、普通字段、一切具有参数的方法。只要在字段、构造器或方法前加上@Autowired即可,如在字段上添加@Autowired:
@Autowired
private UserRespository userRespository;
默认情况下,@Autowired注释意味着依赖是必须的,即所有用到@Autowired注解的属性都要设置(实例化),但是,当你不想设置某一属性时,可以使用@Autowired(required=false)选择关闭默认行为。
@Autowired(required = false)
private TestObject testObject;
此时的TestObject可以不添加注解直接使用,即
//测试@Autowired(required=false)
public class TestObject {
public TestObject() {
System.out.println("TestObject ...");
}
}
当一个接口对应多个实现类时,在你使用接口提供的方法时会出现available: expected single matching bean but found 多处的错误,此时的解决方法一是:在其中一个实现类添加注解的地方给定一个默认值,即
@Repository("userRepository")
解决方法二:在装配的时候指定名字
@Autowired
@Qualifier("userRepositoryImpl")
public UserRespository userRespository;
UserRepositoryImpl是UserRepository的一个实现类。
在依赖注入的时候,即Main.java中这样写:
ApplicationContext ctx=new
ClassPathXmlApplicationContext("beans-annotation.xml");
UserRespository userRespository=(UserRespository)ctx.getBean("userRepositoryImpl");
采用这种方法时要注意@Autowired中required的值:
@Autowired(required = true)
完整代码见: