Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实例变量的Spring作用域用法_Java_Spring_Web Services_Spring Mvc - Fatal编程技术网

Java 实例变量的Spring作用域用法

Java 实例变量的Spring作用域用法,java,spring,web-services,spring-mvc,Java,Spring,Web Services,Spring Mvc,我们正在实现spring服务,@Webservice层是单例的,它调用一个“服务”层,这是一个原型。服务层有很多实例变量,因此,认为将其作为原型是理想的,但是,由于@Webservice层是单例的,所以该原型看起来只实例化了一次 什么类型的@Scope适合我们?我们在服务层上有很多实例变量,我们很难使它们成为方法的局部变量,因为有很多代码需要更改 如果我将所有层都设置为单体,那么两个线程是否共享实例变量 给定一个带有注入目标的单例bean,Spring将初始化bean并立即注入字段/方法/构造函

我们正在实现spring服务,@Webservice层是单例的,它调用一个“服务”层,这是一个原型。服务层有很多实例变量,因此,认为将其作为原型是理想的,但是,由于@Webservice层是单例的,所以该原型看起来只实例化了一次

什么类型的@Scope适合我们?我们在服务层上有很多实例变量,我们很难使它们成为方法的局部变量,因为有很多代码需要更改


如果我将所有层都设置为单体,那么两个线程是否共享实例变量

给定一个带有注入目标的单例bean,Spring将初始化bean并立即注入字段/方法/构造函数。如果注入目标是一个原型bean,Spring将只执行一次

据推测,您希望单例处理的每个动作或事件都有一个新的原型bean。您需要一个AOP范围的代理。这在关于的Spring一章中有记录。通过配置作用域代理,Spring将注入代理而不是原型bean

代理本身将把对它的所有调用委托给一个原型bean,每次都是一个新实例

通过注释配置,您可以使用

@Scope(scopeName = BeanDefinition.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
这告诉Spring使用代理来配置bean,代理将继承目标的实际类类型并成为原型

当你注射它的时候

@Autowired
private MyPrototypeBean bean;
bean
将保存对代理对象的引用。然后可以调用方法

bean.method();
这将委托给一个新实例。这意味着每次通话

bean.method();
bean.method();
bean.method();
将操作一个新实例,上面示例中的三个新实例。如果只需要一个实例来调用这些方法,可以从代理中提取它。请参阅提供的解决方案


作用域代理原型。@SotiriosDelimanolis您能详细说明一下吗?@SotiriosDelimanolis注释中是否有与此等效的内容?是,
@org.springframework.context.annotation.Scope
MyPrototypeBean target = null;
if (AopUtils.isJdkDynamicProxy(proxy)) {
    target = (MyPrototypeBean) ((Advised)proxy).getTargetSource().getTarget();
} // won't work for CGLIB classes AFAIK (gotta search)