SpringBoot反射機構の実現
1847 ワード
CLASS実装クラスオブジェクトの取得
クラス実装クラスのパッケージ名パスに基づいてインスタンス化オブジェクトを取得
//
String a ="com.bnwisdom.demo.service.impl.ActivitiDeployServiceImpl";
// class
Class aClass = Class.forName(confById.getImplClass());
以前はClassを直接通っていました.forName(confById.getImplClass()).newInstance();オブジェクトを取得しに来ましたが、実際には問題があります.私のプロジェクトはspringBootプロジェクトで、コンテナに入れて管理していないので、別の操作に変更してspringに管理させました.
// class spring
activitiDeployService = (ActivitiDeployService) SpringContextUtil.getBean(aClass);
package com.bnwisdom;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* * spring , bean
*/
@Component
public class SpringContextUtil {
// spring
private static ApplicationContext applicationContext;
/**
* * ApplicationContextAware , * @param
* applicationContext
*/
public static void setApplicationContext(
ApplicationContext applicationContext) {
if (null == SpringContextUtil.applicationContext)
SpringContextUtil.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* * name Bean. * * @param name * @return
*/
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
/**
* * name Bean. * * @param clazz * @return
*/
public static T getBean(Class clazz) {
return getApplicationContext().getBean(clazz);
}
/**
* * name, Clazz Bean * * @param name * @param
* clazz * @return
*/
public static T getBean(String name, Class clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
これにより実装クラスに関するメソッドを取得できる.