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);
	}

}


これにより実装クラスに関するメソッドを取得できる.