У меня есть класс, который работает следующим образом:
@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 установить источник данных, если таким образом создается новый экземпляр моего класса?Или мне нужно немного изменить мою конфигурацию?Поскольку первая версия работает, похоже, моя конфигурация верна.
Спасибо,
Пол