這篇文章主要介紹java如何使用BeanFactoryPostProcessor注入Bean,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司成立于2013年,先為青神等服務(wù)建站,青神等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為青神企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
它與 BeanPostProcessor
接口類似,可以對bean的定義(配置元數(shù)據(jù))進行處理;也就是spring ioc
運行BeanFactoryPostProcessor在容器實例化任何其他的bean之前讀取配置元數(shù)據(jù),并有可能修改它;如果業(yè)務(wù)需要,可以配置多個BeanFactoryPostProcessor的實現(xiàn)類,通過"order"控制執(zhí)行次序(要實現(xiàn)Ordered接口)。
import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.stereotype.Component; @Component public class SpringUtils implements BeanFactoryPostProcessor { /** Spring應(yīng)用上下文環(huán)境 \*/ private static ConfigurableListableBeanFactory beanFactory; @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { SpringUtils.beanFactory = beanFactory; } @SuppressWarnings("unchecked") public staticT getBean(String name) throws BeansException { return (T) beanFactory.getBean(name); } public static T getBean(Class clz) throws BeansException { T result = (T) beanFactory.getBean(clz); return result; } }
package com.example.groovy.testgroovy.task; import groovy.lang.GroovyClassLoader; public class GroovyUtils { private final static ClassLoader classLoader = GroovyUtils.class.getClassLoader();//獲取當前類裝載器 //ClassLoader:就是類的裝載器,它使JVM可以動態(tài)的載入Java類,JVM并不需要知道從什么地方(本地文件、網(wǎng)絡(luò)等)載入Java類,這些都由ClassLoader完成。 public final static GroovyClassLoader groovyClassLoader = new GroovyClassLoader(classLoader); //GroovyClassLoader:負責(zé)在運行時編譯groovy源代碼為Class的工作,從而使Groovy實現(xiàn)了將groovy源代碼動態(tài)加載為Class的功能。 /** * . * 獲取實例化對象 * @param script groovy腳本內(nèi)容 * @param* @return * @throws IllegalAccessException * @throws InstantiationException */ public static T instanceTaskGroovyScript(String script) throws IllegalAccessException, InstantiationException { Class taskClz = groovyClassLoader.parseClass(script); T instance = (T) taskClz.newInstance(); return instance; } }
@Slf4j @Component public class CallAnalysisGroovyTask { /** * . * 讀取腳本內(nèi)容 * * @return */ public String getGroovy() { String context = ""; try { String path = "E:\\IDEAFile\\testgroovy\\src\\main\\resources\\groovy\\LoadBean.groovy"; context = FileUtils.readFileToString(new File(path));//將腳本內(nèi)容轉(zhuǎn)為字符串 } catch (IOException e) { log.error("file is not found[{}]", e); } return context; } /** * . * 執(zhí)行g(shù)roovy腳本 * * @param script */ public void execGroovy(String script) { try { Runnable runnable = GroovyUtils.instanceTaskGroovyScript(script);//獲取實例對象 runnable.run();//調(diào)用腳本方法 } catch (Exception t) { log.error("execGroovy file {} error", script); } } }
@Slf4j class LoadBean implements Runnable { /** * . * Groovy獲取Bean */ @Override void run() { log.info("Groovy開始執(zhí)行,當前類{}", this.getClass()) ScriptService service = SpringUtils.getBean(ScriptService.class) log.info("ApplicationContext獲取對象[{}]", service.class) List