0

春のクラスがあります。

@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) {
     ....
}

これが私がこれをしている理由ですか?

ありがとう

4

1 に答える 1