我有一个像这样工作的课程:
@Component
public class MyClass
{
@Autowired
public void setDataSource(DataSource dataSource)
{
...
}
public void doSomethingUsingDataSource()
{
// use autowired datasource
}
}
我的 applicationContext.xml 包含以下内容:
<context:load-time-weaver/>
<context:component-scan base-package="mypackage" />
如果我在另一个类中实例化 MyClass,这很好用:
MyClass mc = new MyClass();
mc.doSomethingUsingDataSource();
但是,如果 MyClass 是一个单例:
@Component
public class MyClass
{
private static MyClass mc;
@Autowired
public void setDataSource(DataSource dataSource)
{
...
}
private void doSomethingUsingDataSource()
{
// use autowired datasource
}
public static void doSomething()
{
if (mc == null)
{
mc = new MyClass();
}
mc.doSomethingUsingDataSource();
}
}
我打电话给
MyClass.doSomething();
然后我得到一个 NPE,因为 dataSource 为空。
如果以这种方式创建我的类的新实例,Spring 是否无法设置数据源?还是我需要稍微改变一下我的配置?由于第一个版本有效,看来我的配置是正确的。
谢谢,
保罗