快捷搜索:

之间的依赖问题

日期:2019-11-01编辑作者:二战前线
  • 放弃依赖注入 : singleton 作用域的 Bean 每次都需要 propertype 作用域的 Bean 时, 主动向容器请求新的 Bean 实例 , 即可保证每次注入的 Bean , 都是新的 propertype Bean 的实例 . ( 不推荐 )
  • 利用方法注入 : 使用 <lookup-method> 标签指定一个抽象方法和 propertype Bean . 具体实现就是将 singleton Bean 的类声明为一个抽象类 , 并提供一个抽象方法 , 这个抽象方法就是用来注入 propertype Bean 的 . ( 推荐使用 )

注 : 利用方法注入的实质使用了代理 , 分为两种代理 , JDK 代理和 cglib 代理 , 如果目标抽象类实现过接口 , Spring 容器会采用 JDK 代理实现抽象方法 , 如果目标类没有实现过接口 , Spring 会采用 cglib 代理 , 实现该抽象方法 .

二战前线,1

每次看书都会发现自己的不足 .

解决这个问题有两种方式 :

      当一个 singten 的 Bean 依赖一个 prototype 的 Bean 时 , 如果不加注意 , 会发生一些奇怪的事情 , prototype 变为了 singten 了 , 这是为什么呢 ?

      这是 Spring 容器本身的特性 , 当初始化 Spring 容器时 , 容器会预初始化容器中所有的 singleton 的 Bean , 由于 singleton Bean 依赖于 propertype Bean , 因此 , 容器在初始化 singleton Bean 之前会先创建 propertype Bean , 然后将创建好的 propertype Bean 作为属性注入到 singleton Bean 中 , 一旦容器创建好 singleton Bean , 容器在它销毁之前都不会为它第二次注入 propertype Bean , 这样一来 , propertype Bean 却表现出了 singleton 的行为了 , 与设计的初衷违背 .

下面举一个栗子 :

       一个猎人 , 有打猎的功能 , 每次打猎都带上猎狗 , 但是每次带的猎狗都不同 , 也就是符合上面的一个是 singten , 一个是 prototype , 猎人依赖猎狗 .

 

本文由澳门新普京发布于二战前线,转载请注明出处:之间的依赖问题

关键词:

拉一个小球

一直以来都对物理效果有神秘感,完全不知道怎么实现的.直到看到了周银辉在老早前写的一篇博客: 终于知道是怎么实...

详细>>

化作天使守护你

“上课了上课了上课了,下午是那个更年期的课,迟到了又该说……”舍友不停喊着。 一种是羡慕和遗憾,一种是幸...

详细>>

Swift

Swift iOS : 字体Logo 嫌恶了应用位图在xcode的Assets.xcassets内,因为劳动,包罗如下的麻烦:找图 图需求分尺寸 要求操作...

详细>>

微信红包的成功之处

微信红包这一成效,对于全体微信来讲至关心器重要。即使微信已经推出了微信钱袋和转账等作用,但使用者寥寥—...

详细>>