Spring中bean与bean之间的关联

本文深入探讨了Spring框架中依赖注入的实现方式,重点讲解了@Autowired、@Resource和@Inject这三个注解的应用场景及区别。通过实例演示了如何在不同类型的字段、构造器和方法中使用这些注解,并解释了在多实现类情况下如何通过@Qualifier指定具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面讲过使用注解配置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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值