Spring之再论scope

@Scope(value = “prototype”)
表示每一次获取都是一个新bean,如果当一个单例bean依赖一个prototype bean时,可能就存在问题了。
Book 单例
Librily prototype

Book book = (Book) ctx.getBean("Book");
book.getLibrily().setLiNmae("第一次设置library");
System.out.println(book.getLibrily().getLiNmae());
Librily librily = (Librily) ctx.getBean("librily");
librily.setLiNmae("第二次设置library");
book = (Book) ctx.getBean("Book");
System.out.println(book.getLibrily().getLiNmae());

结果

第一次设置library
第一次设置library

因此假如需要绑定最新的bean这样是存在问题的。

解决该问题有以下两种思路。
部分放弃依赖注入:当singleton bean 每次需要non-singleton bean 时,主动向容器请求新的bean 实例,保证了每次产生的bean 实例都是新的实例。
利用方法注入:第一种方式显然不是一个好的做法,因为在代码中主动请求新的bean 实例时,必然导致代码与Spring API 糯合,造成严重代码污染。通常情形下,我们采用第二种做法一一使用方法注入,通常使用lookup 方法注入。lookup 方法注入:指容器能够重写容器中bean 的抽象或具体方法,并返回查找容器中其他bean 的结果。被查找的bean 通常是一个non-singleton bean (尽管也可以是一个singleton 的)。Spring 通过使用CGLIB 库修改客户端的二进制码,从而实现上述的要求。(一直没有使用成功)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值