Groovy动态执行java

使用@Component时再使用@Resource或@Autowired时注入失败问题 在使用@Component注解将bean实例化到spring容器内的时候,@Autowired是在这个bean之中的,@Autowired还未完成自动装载,所以导致service为null。最近在写java项目时发现在使用了@Component的类同时使用@Autowired自动注入service或者mapper的时候发现并未注入成功,得到的对象是null.@Autowired注解放在方法上会在类加载后自动注入这个方法的参数,并执行一遍方法。 阅读详情

处理spring动态注入:

package com.xxl.job.executor.mvc.controller;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringContextUtils implements ApplicationContextAware {
        static ApplicationContext context;
        @Override
        public void setApplicationContext(ApplicationContext context)
                throws BeansException {
            SpringContextUtils.context = context;
        }

        public static ApplicationContext getContext() {
            return context;
        }

        public static void autowireBean(Object bean) {
            context.getAutowireCapableBeanFactory().autowireBean(bean);
        }

        public static <T> T getBean(Class<T> clazz) {
            return context.getBean(clazz);
        }
    }

示例参考:

package com.xxl.job.executor.mvc.controller;

import com.xxl.job.core.handler.IJobHandler;
import groovy.lang.GroovyClassLoader;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@EnableAutoConfiguration
public class IndexController {

    @RequestMapping("/")
    @ResponseBody
    public String index() {
        return "xxl job executor running.";
    }


    @RequestMapping("/index2")
    public void index2() throws Exception {
        GroovyClassLoader groovyClassLoader = new GroovyClassLoader();

        String codeSource = "package com.xxl.job.service.handler; " +
                " " +
                "import com.xxl.job.core.context.XxlJobHelper; " +
                "import com.xxl.job.core.handler.IJobHandler; " +
                "import com.xxl.job.executor.mvc.controller.IndexController; " +
                "import org.slf4j.Logger; " +
                "import org.slf4j.LoggerFactory; " +
                "import org.springframework.beans.factory.annotation.Autowired; " +
                " " +
                "public class DemoGlueJobHandler2 extends IJobHandler { " +
                "    private static Logger logger = LoggerFactory.getLogger(DemoGlueJobHandler2.class); " +
                " " +
                "    @Autowired " +
                "    private IndexController c2; " +
                " " +
                "    @Override " +
                "    public void execute() throws Exception{ " +
                "        logger.info(\"------------------actJobHandler2 job start----------------\"); " +
                "        logger.info(\"测试glue模式 XxlJobHelper2.log\"+c2.index()); " +
                "        logger.info(\"------------------actJobHandler2 job end----------------\"); " +
                "    } " +
                " " +
                "} ";
        Class<?> clazz = groovyClassLoader.parseClass(codeSource);
        if (clazz != null) {
            Object instance = clazz.newInstance();
            SpringContextUtils.autowireBean(instance); // 对脚本java中的Autowired成员变量进行注入
            if (instance!=null) {
                if (instance instanceof IJobHandler) {
                    IJobHandler instance1 = (IJobHandler) instance;
                    instance1.execute();
                } 
            }
        }
    }
}
使用@Autowire注解注入dao层时空指针异常:java.lang.NullPointerException: null 今天帮室友找bug的时候,她的一个消息监听类里用了@Autowired注解去注入DAO层接口,然后发现她注入的对象一直在报空指针异常:java.lang.NullPointerException,于是开始排查问题所在: 1. 首先这种注入失败一般是因为该类上没有@Service注解,但是加了之后仍然注入失败空指针异常 ... 2. 开始病急乱投医,@Autowired换成@Resource,类上注解从@Service换成@Repository又换成@Component,将它们排列组合全都试了一遍,依旧无 阅读详情

相关推荐

Java动态执行可配置的逻辑

<br />某些场景下Java系统里需要动态执行一段配置在数据库中(也可以是其他存储)的逻辑,仅仅基于Java是无法完成的,但可以通过集成Groovy来实现这个效果,尝试过程如下:<br />1)在数据库中配置脚本,表结构随意定义,例子如下:<br /><br />2)Java中动态调存在于数据库里的groovy脚本(存在上表中的script字段里)<br /> File f = null; BufferedWriter bw = null; Connect

走向架构师之路 1万+

神奇的SpringContextUtil

不大不小算是个知识点吧

qq_34787180的博客 4578

SpringUtils.getBean 空指针异常问题

jeecgboot集成flowable中SpringUtils.getBean 空指针异常问题

宁波阿成的博客 1556

Spring获取注入Bean

package com.clicks.config; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * @author

weixin_48314739的博客 977

掌握Java动态代码执行技术:Groovy实战指南

动态代码执行是指在运行时构建和执行代码的能力。与传统的静态编译执行不同,动态执行允许在程序运行过程中修改和执行新的代码片段,甚至可以执行预先未知的代码。// 示例代码,展示Java中使用eval方法动态执行字符串形式的代码try {");通过上述示例,可以看出动态代码执行可以在运行时即时构建并执行代码,这极大地提升了程序的灵活性。Groovy是一种强大的动态语言,运行在Java平台上,它与Java有着天然的亲缘关系。

weixin_35815766的博客 842

数据集分享 | IWR1642呼吸心跳数据集

雷达开源数据库 数据集

【调皮连续波】雷达技术领域知识博主 3205

groovy实现java动态编译_Groovy&Java动态编译执行

Groovy&Java动态编译执行工作中,遇到部分业务经常动态变化,或者在不发布系统的前提下,对业务规则进行调整。那么可以将这部分业务逻辑改写成Groovy脚本来执行,那么就可以在业务运行过程中动态更改业务规则,达到快速响应。Case1: Groovy动态编译执行闲话少说,直接上代码:static Compilable engine; //获取groovy编译类static {Script...

weixin_30976201的博客 3288

用STM32H7的FMC+AD7606搭建多通道数据采集系统:两种工作模式(查询与FIFO中断)的代码详解与性能对比

本文详细解析了基于STM32H7微控制器和AD7606 ADC芯片的多通道数据采集系统设计,重点对比了查询模式与FIFO中断模式的实现方法与性能差异。通过FMC总线实现高速并行数据采集,系统支持16bit同步采样,最高可达200Ksps/通道。文章提供了完整的代码实现和优化策略,帮助工程师在工业监测等实时性要求高的场景中构建可靠的数据采集方案。

weixin_30599769的博客 485

java如何动态的执行groovy字符串

是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。

qq_63815371的博客 926

汇编语言与USB量产工具开发解析

本文解析了汇编语言在USB量产工具开发中的应用。USB量产工具主要用于批量配置USB设备,包括固件烧录、格式化、信息写入等功能。汇编语言在底层硬件操作中发挥关键作用,如直接控制USB寄存器、编写驱动和精确时序控制。文章通过伪代码示例展示了USB控制器初始化和固件烧录流程,并强调硬件依赖性、安全机制和时序精度等注意事项。开发需严格遵循芯片手册,建议优先使用厂商SDK,避免设备损坏风险。

RulesChen的博客 1024

【Tessent Shell Users Manual】【Ch3】Design Introspection and Editing(未完待续)

Tessent Shell 提供了一系列用于检查(examining/introspecting)和编辑design的命令。

Tranquil_ovo的博客 1731

【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )

一、以动态特性编译的 Groovy 类、 二、Groovy 语言与 Java 语言执行效率对比、 三、以静态特性编译的 Groovy 类、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2914

跟着团子学SAP PS:BOM和项目结构的联动-BOM Transfer CN33

关于项目中的物料组件挂接你需要了解的一点功能

Lucas1211的博客 2万+

java groovy 动态计算_spring + groovy 实现动态代码注入执行

昨天线上的代码调用一个远程的服务无缘无故不成功,又没加那么多日志,不好定位问题,好想在线上执行一下代码,打印点log看看 于是想着怎么动态执行点java代码,忽然想起以前玩过的groovy,于是搞起来大概思路是这样,写一个控制器,接收一段代码,动态执行,然后返回执行结果,切记,做好权限控制,免得杯具没想到实现起来异常简单1、gradle.build加入groovy依赖compile "org.co...

weixin_32064437的博客 739

R语言生存分析之限制性立方样条分析:样条回归、和多项式回归有什么不同?是否存在非线性关系、限制性立方样条cox回归模型

R语言生存分析之限制性立方样条分析:样条回归、和多项式回归有什么不同?是否存在非线性关系、限制性立方样条cox回归模型

statistics+insight+vista+power 634

PX4从放弃到精通(十一):混控及PWM输出

文章目录前言一、混控脚本二、使用步骤1.引入库2.读入数据总结 前言 一个人可以走的更快,一群人才能走的更远,交流学习加qq:2096723956 更多保姆级PX4+ROS学习视频:https://b23.tv/ZeUDKqy 分享知识,传递正能量,如有疏漏或不当之处,恳请指出. 一、混控脚本 混控脚本定义了不同 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pand

超维空间科技的博客 1万+

java脚本引擎Groovy动态执行

1.2.3.4.5.

DN金猿的博客 545

Agent 智能体学习指南:从入门到求职的完整路线

AI Agent 不是更长的 prompt,而是一类系统设计——模型在受控环境里观察状态、选择动作、调用工具、接收反馈。本文系统梳理 Agent 的 5 个核心概念、7 个关键模块(Goal/State/Context/Tools/Loop/Guardrails/Eval)、三条学习路线(工程落地/研究算法/求职作品)、框架选型策略(LangGraph/OpenAI Agents SDK/Pydantic AI 等场景推荐),以及可执行的 7 天最小项目计划(从概念到简历 bullet)。

program哲学 229

java 执行动态的脚本(groovy) 调用Springboot的Service方法

功能目的:通过在线编写代码,使其项目具备动态调整java中已定义好的Service的方法,通过组合相关代码,灵活完成相应功能。本示例,调用时,参数是对象,需要通用 import 对象。要与Service的参数对象类型保持一致。示例1:body参数 (groovy脚本)示例2:body参数(groovy脚本)1. 引入groovy jar包。3. 4.示例Service。3.定义示例Service。

hongbowu的专栏 889

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java | 在 Java 中执行动态表达式语句: 前中后缀、Ognl、SpEL、Groovy、Jexl3

在 Java 中执行动态表达式语句 在一些规则集或者工作流项目中,经常会遇到动态解析表达式并执行得出结果的功能。 规则引擎是一种嵌入在应用程序中的组件,它可以将业务规则从业务代码中剥离出来,使用预先定义好的语义规范来实现这些剥离出来的业务规则;规则引擎通过接受输入的数据,进行业务规则的评估,并做出业务决策。 工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。 工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表達并对其实施计算。 工作.

双鬼带单 2326

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

怎么编译grovy_Groovy&Java动态编译执行

http://www.youzitool.com/blog/15.html工作中,遇到部分业务经常动态变化,或者在不发布系统的前提下,对业务规则进行调整。那么可以将这部分业务逻辑改写成Groovy脚本来执行,那么就可以在业务运行过程中动态更改业务规则,达到快速响应。Case1: Groovy动态编译执行闲话少说,直接上代码:static Compilable engine; //获取groovy...

weixin_32099703的博客 275

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java调用Groovy动态代码

java调用Groovy动态代码

NULL_YM 503

java 动态 执行 语句_Java | 在 Java 中执行动态表达式语句: 前中后缀、SpEL、Groovy、Jexl3...

在 Java 中执行动态表达式语句在一些规则集或者工作流项目中,经常会遇到动态解析表达式并执行得出结果的功能。规则引擎是一种嵌入在应用程序中的组件,它可以将业务规则从业务代码中剥离出来,使用预先定义好的语义规范来实现这些剥离出来的业务规则;规则引擎通过接受输入的数据,进行业务规则的评估,并做出业务决策。工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,...

weixin_39855944的博客 229

java 动态 执行 语句_Java动态执行可配置的逻辑 | 学步园

某些场景下Java系统里需要动态执行一段配置在数据库中(也可以是其他存储)的逻辑,仅仅基于Java是无法完成的,但可以通过集成Groovy来实现这个效果,尝试过程如下:1)在数据库中配置脚本,表结构随意定义,例子如下:2)Java中动态调存在于数据库里的groovy脚本(存在上表中的script字段里)File f = null;BufferedWriter bw = null;Connectio...

weixin_39962675的博客 251

在JAVA中运行Groovy

Groovy被设计为轻量级和容易嵌入到Java应用程序系统。 1、Groovy脚本样例 def run(foo) {        println 'Hello World!'        x = 123        foo * 10 }   run foo l         Groovy脚本样例包含run()函数,并在最后调用run(),返回结果 l     ...

summer85的博客 240

GroovyClassLoader类进行java调用groovy脚本

1 目的 动态执行任务或者扩展功能,需要java动态执行groovy代码 2 项目依赖 <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> ...

红豆和绿豆的博客 7909
上一篇: spring boot自定义配置文件并且提示
下一篇: MyBatis根据实体类生成resultMap 和 更新插入语句
村口老师傅
博客等级 码龄9年 67粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值