美文网首页
spring单例,多例。service层多个实现类等等

spring单例,多例。service层多个实现类等等

作者: 屎倒淋头还嚼便 | 来源:发表于2019-05-30 10:13 被阅读0次

出自:https://blog.csdn.net/god8816/article/details/8045998

以下出自:https://www.jianshu.com/p/54b0711a8ec8

@Component

// singleton、prototype(如果只在此处加多例,不再controller层加多例,那么注入本类时依然是单例)

//(可能controller单例实例化之后,不会再更改属性的值了。)

// 在此处加多例、controller也加多例,那么,两者都是多例了。

//@Scope("prototype")

/*

*首先value就分为四类:

ConfigurableBeanFactory.SCOPE_PROTOTYPE,即“prototype”

ConfigurableBeanFactory.SCOPE_SINGLETON,即“singleton”

WebApplicationContext.SCOPE_REQUEST,即“request”

WebApplicationContext.SCOPE_SESSION,即“session”

  他们的含义是:

singleton和prototype分别代表单例和多例;

request表示请求,即在一次http请求中,被注解的Bean都是同一个Bean,不同的请求是不同的Bean;

session表示会话,即在同一个会话中,被注解的Bean都是使用的同一个Bean,不同的会话使用不同的Bean。

  使用session和request产生了一个新问题,生成controller的时候需要service作为controller的成员,

但是service只在收到请求(可能是request也可能是session)时才会被实例化,controller拿不到service实例。

为了解决这个问题,@Scope注解添加了一个proxyMode的属性,

有两个值ScopedProxyMode.INTERFACES和ScopedProxyMode.TARGET_CLASS,前一个表示表示Service是一个接口,

后一个表示Service是一个类。

  本文遇到的问题中,将@Scope注解改成@Scope(value = WebApplicationContext.SCOPE_REQUEST,

proxyMode = ScopedProxyMode.TARGET_CLASS)就可以了,这里就不重复贴代码了。

*/

// controller上不用加scope注解

@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) // 当前类是普通类,不是接口

public class TestBean {

相关文章

网友评论

      本文标题:spring单例,多例。service层多个实现类等等

      本文链接:https://www.haomeiwen.com/subject/czcmtctx.html