春のクラスがあります。
@Service("dbManager")
@Repository
@Transactional
public class DatabaseManager {
GenericXmlApplicationContext context;
@PersistenceContext
private EntityManager em;
public DatabaseManager(GenericXmlApplicationContext context) {
this.context = context;
}
....
} //end of class DatabaseManager
SpringUtil クラスがあります
public class SpringUtil {
public static GenericXmlApplicationContext loadSpringContext(String springXmlFile) {
GenericXmlApplicationContext context = new GenericXmlApplicationContext();
context.load(springXmlFile);
context.refresh();
return context;
} //end of loadSpringContext()
} //end of class SpringUtil
現在、主に次のようなものを使用しています
public class Regulator {
public static void main( String[] args ) {
Test test = new Test;
test.start();
} //end of main()
} //end of class Regulator
テストクラスはこちら
public class Test {
public void start() {
String springXmlFile = "classpath:spring/plcb-app-context-xml.xml";
GenericXmlApplicationContext context = SpringUtil.loadSpringContext(springXmlFile);
} //end of reportStudent()
} //end of class Test
しかし、私はエラーが発生しています
Could not instantiate bean class [...DatabaseManager]: No default constructor
found; nested exception is java.lang.NoSuchMethodException:
...DatabaseManager.<init>()
クラスが作成されたときに、DatabaseManager
私が使用して作成しているスプリングコンテキストSpringUtil.loadSpringContext(springXmlFile)
をそれに渡す必要があります。どうすればできますか?
ありがとう
編集 - - - - - - - - - -
public void switchDataSource(DatabaseType databaseType) {
DriverManagerDataSource dataSource = null;
if (databaseType == DatabaseType.LEGACY) {
dataSource = (DriverManagerDataSource)context.getBean("myLegacyDataSource");
} else if (databaseType == DatabaseType.LS360) {
dataSource = (DriverManagerDataSource)context.getBean("myLs360DataSource");
}
LocalContainerEntityManagerFactoryBean emf = context.getBean("myEmf", LocalContainerEntityManagerFactoryBean.class);
emf.setDataSource(dataSource);
}
@SuppressWarnings("unchecked")
@Transactional(readOnly=true)
public List<Object> getResultList(String query, Class mappingClass) throws Exception {
Query emQuery = em.createNativeQuery(query, mappingClass);
return emQuery.getResultList();
} //end of findTraineeFromLegacy()
実際、私は DatabaseManager クラスにこれら 2 つのメソッドを持っています。メソッドでコンテキストからBeanを取得できるように、コンテキストを設定していますswitchDataSource()
。
私ができることの1つは、インスタンスファイルを削除し、メソッドを次のように変更することです
public void switchDataSource(DatabaseType databaseType, GenericXmlApplicationContext context) {
....
}
これが私がこれをしている理由ですか?
ありがとう