返回顶部
首页 > 资讯 > 后端开发 > Python >Java动态脚本Groovy获取Bean技巧
  • 426
分享到

Java动态脚本Groovy获取Bean技巧

2024-04-02 19:04:59 426人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、使用BeanFactoryPostProcessor注入Bean: 第一步:创建实现springUtils 接口工具(组件)来获取spring bean 第二步:创建Groo

Groovy中不能使用@Autowired(autowired是在spring启动后注入的,此时还未加载groovy代码,故无法注入)

一、使用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("数据查询成功...");
    }


脚本运行结果:

二、使用ApplicationContext注入Bean

它是springBeanFactory之外的另一个核心接口或容器,允许容器通过应用程序上下文环境创建、获取、管理bean。为应用程序提供配置的中央接口。在应用程序运行时这是只读的,但如果实现支持这一点,则可以重新加载。

第一步:修改项目启动类,获得ApplicationContext


@SpringBootApplication
public class TestgroovyApplication {

    //获取应用程序上下文环境
    private static ApplicationContext applicationContext;

    public static void main(String[] args) {
        applicationContext = SpringApplication.run(TestgroovyApplication.class, args);
    }

第二步:修改resources目录下创建的.groovy文件


    
    @Override
    void run() {
        log.info("Groovy开始执行,当前类{}", this.getClass())
        ScriptService service = TestgroovyApplication.applicationContext.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())
    }


脚本运行结果:

到此这篇关于Java动态脚本Groovy获取Bean技巧的文章就介绍到这了,更多相关Java动态脚本Groovy获取Bean内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java动态脚本Groovy获取Bean技巧

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

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

猜你喜欢
  • Java动态脚本Groovy获取Bean技巧
    目录一、使用BeanFactoryPostProcessor注入Bean: 第一步:创建实现SpringUtils 接口工具(组件)来获取spring bean 第二步:创建Groo...
    99+
    2024-04-02
  • Java动态脚本Groovy获取Bean技巧是什么
    本篇内容介绍了“Java动态脚本Groovy获取Bean技巧是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Groovy中不能使用@A...
    99+
    2023-06-22
  • Java动态脚本Groovy
    目录1.Groovy特性 2.核心涉及 3.Java与Groovy转换 第一步:引入Groovy依赖 第二步:创建interface接口声明方法 第三步:在resources目录下创...
    99+
    2024-04-02
  • java 内嵌Groovy动态脚本操作
    固定的策略有时候还是无法满足千变万化的需求变动,一方面需要支持特定的用户需求,另一方面又得尽可能的复用代码,避免重复开发,这就需要将这部分的特殊的需求剥离出来,采用动态配置规则的方式...
    99+
    2024-04-02
  • Java动态脚本Groovy的特性是什么
    这篇文章主要为大家展示了“Java动态脚本Groovy的特性是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java动态脚本Groovy的特性是什么”这篇文章吧。1.Groovy特性可将ja...
    99+
    2023-06-22
  • SpringBoot整合Groovy脚本实现动态编程详解
    目录Groovy简介应用场景集成与使用第一步、与SpringBoot集成1、pom.xml文件如下:第二步、写出Groovy版本的“Hello World”1...
    99+
    2024-04-02
  • java动态获取nacos配置文件
    前言: 在不启动服务的情况下,修改nacos配置文件,可以动态的获取到配置文件的信息,实现动态刷新的效果。 文章目录 1、依赖jar包2、相关代码3、注意事项 1、依赖jar包 ...
    99+
    2023-09-20
    java spring junit
  • Spring技巧之如何动态读取配置文件
    目录Spring 动态读取配置文件需求背景方案一方案二方案三动态读取配置文件中的信息1、首先是写一个配置文件,方便动态加载1、利用类加载器等读取配置文件Spring 动态读取配置文件...
    99+
    2024-04-02
  • java获取到heapdump文件后快速分析技巧
    目录heapdump文件介绍简介查看堆占用分布查找大对象分配线程查看线程栈检查accesslog日志排查过程复盘MAT查看线程栈VisualVM查看线程栈总结参考资料heapdump...
    99+
    2023-05-17
    java分析heapdump文件 java heap dump文件
  • PHP技巧:获取本月第几周的实用方法
    PHP技巧:获取本月第几周的实用方法 在开发网站或应用程序时,经常会涉及到需要获取当前日期属于本月的第几周的情况。这种情况在制作日历、计划任务等功能时经常会用到。在PHP中,我们可以通...
    99+
    2024-04-02
  • java脚本怎么设置多个动态变量
    在Java脚本中,可以使用多个变量来存储和操作不同的值。下面是几种设置多个动态变量的方法:1. 使用单独的变量来存储每个值:```j...
    99+
    2023-09-15
    java
  • Java详解ScriptEngine接口动态执行JS脚本
    目录简介Eval(String script)描述实例代码Put() and Get()描述实例代码CompiledScript描述实例代码Bindings描述实例代码大多的方法描述...
    99+
    2022-11-13
    Java ScriptEngine Java 动态执行JavaScript脚本
  • Apache服务器上的Java存储技巧:Shell脚本篇!
    如果你是一位Java开发人员,那么你一定知道,在使用Apache服务器进行Java应用程序部署时,需要在服务器上安装Java虚拟机和Tomcat服务器。但是,你是否曾经想过如何更好地管理Java应用程序的存储和部署?本文将介绍一些在Apa...
    99+
    2023-10-17
    存储 shell apache
  • Java实现动态获取文件的绝对路径
    目录前言1. 优化方式一:返回一个文件的绝对路径1.1 情况一1.2 情况二2. 优化方式二:返回一个 InputStream 字节输入流3. 优化方式三:java.util 包下提...
    99+
    2023-02-22
    Java获取文件绝对路径 Java文件绝对路径 Java 绝对路径
  • Java存储技巧:使用Shell脚本管理Apache服务器
    在日常工作中,我们经常需要使用Java来进行服务器管理和维护。而Apache服务器则是我们经常使用的一个服务器软件,它提供了丰富的功能和灵活的配置,但是对于管理人员来说,需要频繁地进行配置和维护。因此,本文将介绍使用Shell脚本来管理A...
    99+
    2023-10-17
    存储 shell apache
  • java如何实时动态获取properties文件的内容
    目录实时动态获取properties文件的内容动态读取的代码读取配置文件 Properties VS ResourceBundle1. 常用API2. Properties 解析属性...
    99+
    2024-04-02
  • Java如何实现动态获取文件的绝对路径
    本文小编为大家详细介绍“Java如何实现动态获取文件的绝对路径”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现动态获取文件的绝对路径”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言我们知道在 J...
    99+
    2023-07-05
  • 【Python】京东自动下单抢购脚本——双十一购物小技巧
    最近种草一款富士📷已久,但限于富士产能,一直都没有等到开放购买,在尝试几次定闹钟到点准时抢购后,果断放弃,于是花了一个周末时间写了一个简易脚本,终于成为一名合格的“富家子弟”。 ...
    99+
    2023-09-03
    python java 抢购 抢购脚本 京东
  • Python脚本操作实现快速自动化任务的技巧与方法
    Python脚本操作实现快速自动化任务的技巧与方法导言:随着计算机技术的发展,自动化已经成为许多行业中的必备技能。Python作为一种简单易学且功能强大的编程语言,成为自动化任务的首选工具之一。本文将介绍一些Python脚本操作实现快速自动...
    99+
    2023-10-22
    自动化 Python 脚本
  • 利用Java如何获取Mybatis动态生成的sql接口实现
    目录前言1、编写xml: SqlGenarate.mapper.xml2、定义接口3、实现接口总结前言 如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 S...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作