Lookup Method Injection

探讨了在Spring框架中如何使用LookupMethodInjection解决singleton依赖nonsingleton的问题,尤其是在LockOpener类依赖KeyHelper类的场景下,确保每次都能获取到新的KeyHelper实例。

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

        Lookup Method Injection 在Spring v1.1版本时加入,用来解决当一个bean依赖于一个与其生命周期不同的bean时出现的问题。尤其,当一个singleton依赖一个nonsingleton时。在这种情况下,setter和constructor注入都会导致一个singleton bean维护一个原本为nonsingleton的单例。在有些情况下,你希望singleton bean 每次都获取一个新的nonsingleton实例。

    设想一个场景,LockOpener类提供开锁服务,它依赖于KeyHelper类来打开锁。但是,KeyHelper的设计涉及到一些内部状态,不适合复用。每次调用openLock()方法时,需要生成一个新的KeyHelper。在这种情况下,LockOpener是singleton,但是如果我们使用常用的方法注入KeyHelper,每次获取的都是同样的KeyHelper实例(在Spring首次注入时实例化的KeyHelper)。为了保证每次获取新的KeyHelper实例,我们需要使用Lookup Method Injection。

         通常,你可以通过让singleton bean实现ApplicationContextAware接口来实现,然后,使用ApplicationContext实例,singleton bean会每次都获取一个新的实例。Lookup Method Injection让singleton bean声明它需要一个nonsingleton dependency,不需要实现特定的Spring接口,就可以在需要时获取一个新的实例。

    Lookup Method Injection通过声明一个方法,lookup method,它会返回一个nonsingleton bean的一个实例。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值