java怎么使用BeanFactoryPostProcessor注入Bean

這篇文章主要介紹了java怎么使用BeanFactoryPostProcessor注入Bean的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇java怎么使用BeanFactoryPostProcessor注入Bean文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

在昌邑等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站制作,昌邑網(wǎng)站建設(shè)費(fèi)用合理。

使用BeanFactoryPostProcessor注入Bean:

它與 BeanPostProcessor接口類似,可以對(duì)bean的定義(配置元數(shù)據(jù))進(jìn)行處理;也就是spring ioc運(yùn)行BeanFactoryPostProcessor在容器實(shí)例化任何其他的bean之前讀取配置元數(shù)據(jù),并有可能修改它;如果業(yè)務(wù)需要,可以配置多個(gè)BeanFactoryPostProcessor的實(shí)現(xiàn)類,通過(guò)"order"控制執(zhí)行次序(要實(shí)現(xiàn)Ordered接口)。

第一步:創(chuàng)建實(shí)現(xiàn)SpringUtils 接口工具(組件)來(lái)獲取spring bean
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 static <T> T getBean(String name) throws BeansException
    {
        return (T) beanFactory.getBean(name);
    }
    public static <T> T getBean(Class<T> clz) throws BeansException
    {
        T result = (T) beanFactory.getBean(clz);
        return result;
    }
}
第二步:創(chuàng)建Groovy腳本裝載類,動(dòng)態(tài)解析腳本為Class
package com.example.groovy.testgroovy.task;

import groovy.lang.GroovyClassLoader;

public class GroovyUtils {

    private final static ClassLoader classLoader = GroovyUtils.class.getClassLoader();//獲取當(dāng)前類裝載器
    //ClassLoader:就是類的裝載器,它使JVM可以動(dòng)態(tài)的載入Java類,JVM并不需要知道從什么地方(本地文件、網(wǎng)絡(luò)等)載入Java類,這些都由ClassLoader完成。

    public final static GroovyClassLoader groovyClassLoader = new GroovyClassLoader(classLoader);
    //GroovyClassLoader:負(fù)責(zé)在運(yùn)行時(shí)編譯groovy源代碼為Class的工作,從而使Groovy實(shí)現(xiàn)了將groovy源代碼動(dòng)態(tài)加載為Class的功能。

    /**
     * .
     * 獲取實(shí)例化對(duì)象
     * @param script groovy腳本內(nèi)容
     * @param <T>
     * @return
     * @throws IllegalAccessException
     * @throws InstantiationException
     */
    public static <T> T instanceTaskGroovyScript(String script) throws IllegalAccessException, InstantiationException {
        Class taskClz = groovyClassLoader.parseClass(script);
        T instance = (T) taskClz.newInstance();
        return instance;
    }
}
第三步:讀取腳本內(nèi)容,執(zhí)行腳本
@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);//獲取實(shí)例對(duì)象
            runnable.run();//調(diào)用腳本方法
        } catch (Exception t) {
            log.error("execGroovy file {} error", script);
        }
    }
}
第四步:在resources目錄下創(chuàng)建.groovy文件
@Slf4j
class LoadBean implements Runnable {

    /**
     * .
     * Groovy獲取Bean
     */
    @Override
    void run() {
        log.info("Groovy開(kāi)始執(zhí)行,當(dāng)前類{}", this.getClass())
        ScriptService service = SpringUtils.getBean(ScriptService.class)
        log.info("ApplicationContext獲取對(duì)象[{}]", service.class)
        List<Script> item = service.findAll()//執(zhí)行bean中數(shù)據(jù)查詢方法
        for (Script s : item) {
            log.info("創(chuàng)建人:[{}],規(guī)則id:[{}],名稱:[{}]", s.getCreatePerson(), s.getRuleId(), s.getScriptName())
        }
        log.info("Groovy結(jié)束執(zhí)行,當(dāng)前類{}", this.getClass())
    }
}
第五步:實(shí)例化腳本,執(zhí)行方法
   @GetMapping("/loadBean")
    public void loadBean(){
        String script = CallAnalysisGroovyTask.getGroovy(); //獲取腳本
        CallAnalysisGroovyTask.execGroovy(script);//實(shí)例化腳本,執(zhí)行方法
        log.info("數(shù)據(jù)查詢成功...");
    }

腳本運(yùn)行結(jié)果:

java怎么使用BeanFactoryPostProcessor注入Bean

關(guān)于“java怎么使用BeanFactoryPostProcessor注入Bean”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“java怎么使用BeanFactoryPostProcessor注入Bean”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享名稱:java怎么使用BeanFactoryPostProcessor注入Bean
網(wǎng)址分享:http://muchs.cn/article26/ghecjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、網(wǎng)站改版、品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、定制開(kāi)發(fā)、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司