广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >java如何使用BeanFactoryPostProcessor注入Bean
  • 171
分享到

java如何使用BeanFactoryPostProcessor注入Bean

2024-04-02 19:04:59 171人浏览 安东尼
摘要

这篇文章主要介绍java如何使用BeanFactoryPostProcessor注入Bean,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用BeanFactoryPostProce

这篇文章主要介绍java如何使用BeanFactoryPostProcessor注入Bean,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

使用BeanFactoryPostProcessor注入Bean:

它与 BeanPostProcessor接口类似,可以对bean的定义(配置元数据)进行处理;也就是spring ioc运行BeanFactoryPostProcessor在容器实例化任何其他的bean之前读取配置元数据,并有可能修改它;如果业务需要,可以配置多个BeanFactoryPostProcessor的实现类,通过"order"控制执行次序(要实现Ordered接口)。

第一步:创建实现SpringUtils 接口工具(组件)来获取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 {

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

第二步:创建Groovy脚本装载类,动态解析脚本为Class

package com.example.groovy.testgroovy.task;

import groovy.lang.GroovyClassLoader;

public class GroovyUtils {

    private final static ClassLoader classLoader = GroovyUtils.class.getClassLoader();//获取当前类装载器
    //ClassLoader:就是类的装载器,它使JVM可以动态的载入Java类,JVM并不需要知道从什么地方(本地文件、网络等)载入Java类,这些都由ClassLoader完成。

    public final static GroovyClassLoader groovyClassLoader = new GroovyClassLoader(classLoader);
    //GroovyClassLoader:负责在运行时编译groovy源代码为Class的工作,从而使Groovy实现了将groovy源代码动态加载为Class的功能。

    
    public static <T> T instanceTaskGroovyScript(String script) throws IllegalAccessException, InstantiationException {
        Class taskClz = groovyClassLoader.parseClass(script);
        T instance = (T) taskClz.newInstance();
        return instance;
    }
}

第三步:读取脚本内容,执行脚本

@Slf4j
@Component
public class CallAnalysisGroovyTask {


    
    public String getGroovy() {
        String context = "";
        try {
            String path = "E:\\ideaFile\\testgroovy\\src\\main\\resources\\groovy\\LoadBean.groovy";
            context = FileUtils.readFileToString(new File(path));//将脚本内容转为字符串
        } catch (IOException e) {
            log.error("file is not found[{}]", e);
        }
        return context;
    }

    
    public void execGroovy(String script) {
        try {
            Runnable runnable = GroovyUtils.instanceTaskGroovyScript(script);//获取实例对象
            runnable.run();//调用脚本方法
        } catch (Exception t) {
            log.error("execGroovy file {} error", script);
        }
    }
}

第四步:在resources目录下创建.groovy文件

@Slf4j
class LoadBean implements Runnable {

    
    @Override
    void run() {
        log.info("Groovy开始执行,当前类{}", this.getClass())
        ScriptService service = SpringUtils.getBean(ScriptService.class)
        log.info("ApplicationContext获取对象[{}]", service.class)
        List<Script> item = service.findAll()//执行bean中数据查询方法
        for (Script s : item) {
            log.info("创建人:[{}],规则id:[{}],名称:[{}]", s.getCreatePerson(), s.getRuleId(), s.getScriptName())
        }
        log.info("Groovy结束执行,当前类{}", this.getClass())
    }
}

第五步:实例化脚本,执行方法 

   @GetMapping("/loadBean")
    public void loadBean(){
        String script = CallAnalysisGroovyTask.getGroovy(); //获取脚本
        CallAnalysisGroovyTask.execGroovy(script);//实例化脚本,执行方法
        log.info("数据查询成功...");
    }

脚本运行结果:

java如何使用BeanFactoryPostProcessor注入Bean

以上是“java如何使用BeanFactoryPostProcessor注入Bean”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: java如何使用BeanFactoryPostProcessor注入Bean

本文链接: https://www.lsjlt.com/news/93579.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java如何使用BeanFactoryPostProcessor注入Bean
    这篇文章主要介绍java如何使用BeanFactoryPostProcessor注入Bean,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用BeanFactoryPostProce...
    99+
    2022-10-19
  • Java 如何使用@Autowired注解自动注入bean
    Java @Autowired注解自动注入bean annotationWire.xml (一定记得配置context:annotation-config/) <?...
    99+
    2022-11-12
  • SpringBoot如何通过注解注入Bean
    这篇文章主要为大家展示了“SpringBoot如何通过注解注入Bean”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot如何通过注解注入Bean”这篇文章吧。1、背景我们谈到Sp...
    99+
    2023-06-29
  • Java中bean如何使用
    今天就跟大家聊聊有关Java中bean如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。bean 的生命周期对象创建实例化Bean对象,默认选择无参构造方法,如果只有一个有参构造...
    99+
    2023-06-20
  • Spring中如何将值注入到Bean中
    这篇文章给大家介绍Spring中如何将值注入到Bean中,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在Spring中,有三种方式注入值到 bean 属性。正常的方式快捷方式“p” 模式新建一个User类,它包含use...
    99+
    2023-05-31
    spring bean bea
  • zuulFilter中注入bean失败如何解决
    今天就跟大家聊聊有关zuulFilter中注入bean失败如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。zuulFilter注入bean失败一、为什么要用到这个上周想实现在网...
    99+
    2023-06-20
  • 如何在java中使用bean
    如何在java中使用bean?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端...
    99+
    2023-06-14
  • 详解Spring bean的注解注入之@Autowired的原理及使用
    一、@Autowired 概念: @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,ge...
    99+
    2022-11-12
  • Spring注解@Configuration与@Bean注册组件如何使用
    今天小编给大家分享一下Spring注解@Configuration与@Bean注册组件如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-07-02
  • springboot 启动如何排除某些bean的注入
    springboot 启动排除某些bean的注入 问题: 最近做项目的时候,需要引入其他的jar。然后还需要扫描这些jar里的某些bean。于是使用注解:@ComponentScan...
    99+
    2022-11-12
  • SpringBoot项目如何将Bean注入到普通类中
    目录如何将Bean注入到普通类中Spring管理的类获得一个注入的Bean方式非Spring管理的类获得一个注入的Bean方式普通类中通过ApplicationContext上下文获...
    99+
    2022-11-12
  • 解决Test类中不能使用Autowired注入bean的问题
    目录Test类中不能使用Autowired注入bean在测试类中我自己使用的测试单元是正确的应该是使用Spring-test里面的测试单元Test包中使用autowired注入提示C...
    99+
    2022-11-12
  • 一文详解Spring如何控制Bean注入的顺序
    目录简介构造方法依赖(推荐)@DependsOn(不推荐)BeanPostProcessor(不推荐)简介 说明 本文介绍Spring如何控制Bean注入的顺序。 首先需要说明的是:...
    99+
    2022-11-13
  • springboot如何读取自定义properties并注入到bean中
    目录读取自定义properties注入到beanspringboot启动日志如下springboot bean实例化和属性注入过程springboot版本(2.0.4 RELEASE...
    99+
    2022-11-12
  • 如何实现bean初始化摧毁方法的注入
    目录实现 bean 初始化、摧毁方法的配置与处理通过xml配置定义初始化、摧毁方法通过实现接口initMethod 方法的注入与执行destroyMethod 方法的注入与执行测试实...
    99+
    2023-05-18
    bean初始化摧毁方法注入 bean 方法注入
  • Spring装配Bean之如何使用Java代码安装配置bean
    这篇文章主要为大家展示了“Spring装配Bean之如何使用Java代码安装配置bean”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring装配Bean之如何使用Java代码安装配置bea...
    99+
    2023-05-30
    spring bean java
  • new中无法使用@autowired进行对象bean注入怎么解决
    这篇文章主要介绍“new中无法使用@autowired进行对象bean注入怎么解决”,在日常操作中,相信很多人在new中无法使用@autowired进行对象bean注入怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希...
    99+
    2023-06-29
  • spring是如何注入对象的和bean创建过程分析
    首先需要知道一个大致实现● 这个注入过程肯定是在 BeanPostProcessor 中实现的●spring 是在 beanFactory.getBean 进行 bean 实例化的,即懒加载● 根据第二条,也就是说在 getBean 的时候...
    99+
    2019-05-21
    java教程 spring 注入对象 bean
  • 如何在Java中运用依赖注入
    今天就跟大家聊聊有关如何在Java中运用依赖注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、C++的诟病C++最遭人诟病的地方就是定义一个类需要写两个文件,一个.h文件和一个....
    99+
    2023-06-15
  • Spring中如何使用@Value注解实现给Bean属性赋值
    目录属性赋值@Value注解的定义:测试1.在添加了Spring依赖的Maven项目中创建2.在resources目录下创建一个配置文件person.properties3.创建配置...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作