java - Spring单例服务和原型(prototype)方法查找注入(inject)

标签 java spring dependency-injection

我有一个如下所示的单例服务类:

@Service
public class SingletonClass {

    // the context is prototype scope
    private Context context;

    public void run(){
        context.setXyz();
    }

    public void runThis(){
        context.getXyz();
    }

    // setter,getter methods for context
}

如何通过查找方法注入(inject)以线程安全的方式实现此目的?

我想跨方法共享状态。使用每个方法获取新的上下文并在后续方法中使用。

最佳答案

您应该按如下方式修改您的 Singleton 类

    @Service
    public abstract class SingletonClass{

     protected abstract Context createContext();

     private Context context;
     @PostConstruct
     public void init() {
     context = createContext();
     }

     public void run(){
     context().setXyz();
     }

     public void runThis(){
     context().getXyz();
     }

     public void runThisWithNewContext() {
     createContext().getXyz();
     }
     }

你的 xml 配置看起来像,

     <bean id="context" class="Context" scope="prototype" />
     <bean id="singletonClass" class="SingletonClass">
       <lookup-method name="createContext" bean="context" />
     </bean>

关于java - Spring单例服务和原型(prototype)方法查找注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30319471/

相关文章:

java - 向 HttpServletRequest 添加额外参数

java - Spring - 从对象池请求作用域 bean

java - 在 Reactor 2.0 中处理 Stream 过滤器的正确方法是什么?

asp.net-mvc - 如何正确使用Moq框架——基本问题

wpf - MVVM 和 StructureMap 使用

java - 为什么在 JSP 中需要 pageContext?

java - 使用记录器创建文件

java - 将字符串转换为 RTF 格式

java - 使自定义对象可转换

angular - Angular2 中的依赖注入(inject)语法