您现在的位置是:主页 > news > 网站开发的技术总结/社交媒体营销案例

网站开发的技术总结/社交媒体营销案例

admin2025/4/24 22:17:18news

简介网站开发的技术总结,社交媒体营销案例,考研哪个培训机构比较好,园洲做网站公司Spring核心开箱即用,有两个作用域:单例和原型。 单例实现单例模式,这意味着在运行时(在JVM中)只有一个实例。 Spring在上下文创建期间实例化它们,将它们缓存在上下文中,并在需要时(或…

网站开发的技术总结,社交媒体营销案例,考研哪个培训机构比较好,园洲做网站公司Spring核心开箱即用,有两个作用域:单例和原型。 单例实现单例模式,这意味着在运行时(在JVM中)只有一个实例。 Spring在上下文创建期间实例化它们,将它们缓存在上下文中,并在需要时(或…

Spring核心开箱即用,有两个作用域:单例和原型。 单例实现单例模式,这意味着在运行时(在JVM中)只有一个实例。 Spring在上下文创建期间实例化它们,将它们缓存在上下文中,并在需要时(或类似的东西)从缓存中提供它们。 每次您访问上下文以获取Bean时都会实例化原型。

当您需要在单例范围的bean中注入原型范围的bean时,会出现问题。 由于单例是在上下文创建过程中创建的(然后注入):这是唯一一次访问Spring上下文,因此原型作用域的bean仅注入一次,从而违背了它们的目的。

为了将原型注入单例,并通过setter和构造函数注入并排进行syde,Spring提出了另一种注入方法,称为方法注入。 它的工作方式如下:由于单例是在上下文创建时实例化的,因此它改变了原型作用域的处理方式,从注入到通过抽象方法创建。 以下代码段显示了实现注入的不成功方法:

publicclassSingleton{privatePrototypeprototype;publicSingleton(Prototypeprototype){this.prototype=prototype;}publicvoiddoSomething(){prototype.foo();}publicvoiddoSomethingElse(){prototype.bar();}
}

下一个代码段显示正确的代码:

publicabstractclassSingleton{protectedabstractPrototypecreatePrototype();publicvoiddoSomething(){createPrototype().foo();}publicvoiddoSomethingElse(){createPrototype().bar();}
}

如您所见,代码没有指定createPrototype()实现。 此职责委托给Spring,因此需要以下配置:

<beanid="prototype"class="ch.frankel.blog.Prototype"scope="prototype"/>
<beanid="singleton"class="sample.MySingleton"><lookup-methodname="createPrototype"bean="prototype"/>
</bean>

注意,方法注入的替代方法是显式访问Spring上下文以自己获取Bean。 这样做是一件坏事,因为它完全击败了整个Inversion of Control模式,但它确实有效(并且在服务器上发生讨厌的错误时,它实际上是唯一的选择-参见下文)。

但是,使用方法注入有几个主要限制:

  • Spring通过更改字节码实现了这种黑魔法。 因此,您需要在类路径上具有CGLIB库 。
  • 该功能仅通过XML配置可用,没有注释(有关更多信息,请参见JIRA )
  • 最后,某些应用服务器存在与CGLIB相关的错误(例如this )
更进一步:
  • Spring关于方法注入的文档

翻译自: https://blog.frankel.ch/method-injection-with-spring/