Spring中bean与bean之间的关联

前面讲过使用注解配置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;
UserRepositoryImplUserRepository的一个实现类。

在依赖注入的时候,即Main.java中这样写:

        ApplicationContext ctx=new
                ClassPathXmlApplicationContext("beans-annotation.xml");

        UserRespository userRespository=(UserRespository)ctx.getBean("userRepositoryImpl");

采用这种方法时要注意@Autowired中required的值:

@Autowired(required = true)

完整代码见:

https://github.com/13029403279/Study/upload/master

发布了234 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/junjunjiao0911/article/details/104287801