春豆线安全

我正在为一个Java类声明一个Spring bean,它用作创建对象的工厂。 我想从不同的线程使用这个工厂,我遇到的问题是线程在尝试使用工厂创建对象时被阻止。

据我所知,春豆是默认的单身人士,这就是我想要的。 我希望工厂是一个单身人士,但我想从不同的线程使用这个工厂创建对象。 工厂中的方法createObject()未同步,因此我不太清楚为什么我遇到此同步问题。

有关哪种方法是实现这一目标的最佳方法?

这是工厂的java代码:

public class SomeFactory implements BeanFactoryAware { private BeanFactory beanFactory; public List createObjects() { List objects = new ArrayList(); objects.add((SomeObject)beanFactory.getBean(SomeObject.class.getName())); return objects; } public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } 

}

如上所述,这个类中似乎没有任何东西需要线程安全。 每次调用createObjects时都会创建一个新的ConfigurableObjects List。 在该List中添加一个SomeObject bean然后返回它。

一个问题:SomeObject实例本身应该是单例吗? 如果是这样,那么你需要保存它,如果它是null,则只调用getBean。

 private SomeObject someObjectInstance = null; public synchronized List createObjects() { List objects = new ArrayList(); if (someObjectInstance = null) { someObjectInstance = (SomeObject)beanFactory.getBean(SomeObject.class.getName()); } objects.add(someObjectInstance); return objects; } 

在这种情况下,您需要同步对CreateObjects的访问,如我所示。