返回顶部
首页 > 资讯 > 后端开发 > Python >Springboot中动态语言groovy介绍
  • 706
分享到

Springboot中动态语言groovy介绍

2024-04-02 19:04:59 706人浏览 八月长安

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

摘要

目录GroovypomResourceScriptSourceDatabaseScriptSourceGroovy Groovy是一种基于Java的语法的基于JVM的编程语言。Gro

Groovy

Groovy是一种基于Java的语法的基于JVM编程语言。Groovy支持动态输入,闭包,元编程,运算符重载等等语法。除此之外,Groovy还提供了许多类似脚本语言的功能,比如,多行字符串,字符串插值,优雅的循环结构和简单的属性访问。另外,结尾分号是可选的。而这些都有足够的理帮助开发人员为了提高开发效率。

换句话说,Groovy就是一种继承了动态语言的优良特性并运行在JVM上的编程语言。由于Groovy的语法非常接近Java,所以Java开发人员很容易开始使用Groovy。 Spring Boot应用中也支持使用Groovy编程语言进行开发。

  • ResourceScriptSource:在 resources 下面写groovy类
  • StaticScriptSource:把groovy类代码放进XML里
  • DatabaseScriptSource:把groovy类代码放进数据库

pom

<!-- groovy -->
<dependency>
    <artifactId>groovy</artifactId>
    <groupId>org.codehaus.groovy</groupId>
    <version>2.5.8</version>
    <scope>compile</scope>
</dependency>

ResourceScriptSource

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = springApplication.run(DemoApplication.class, args);
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-groovy.xml");
        GroovyService bean = context.getBean(GroovyService.class);
        String sayHello = bean.sayHello();
        System.out.println(sayHello);
    }
}
public interface GroovyService {
    String sayHello();
}

spring-groovy.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="Http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:lang="http://www.springframework.org/schema/lang"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/lang
                           http://www.springframework.org/schema/lang/spring-lang.xsd">
    <lang:groovy id="helloService">
        <lang:inline-script>
            import com.example.demo.groovy.GroovyService
            class HelloServiceImpl implements GroovyService {
                String name;
                @Override
                String sayHello() {
                    return "Hello $name. Welcome to static script in Groovy.";
                }
            }
        </lang:inline-script>
        <lang:property name="name" value="maple"/>
    </lang:groovy>
</beans>

DatabaseScriptSource

方法一:

实时读取DB里的groovy脚本文件

利用GroovyClassLoader去编译脚本文件

把class对象注入成Spring bean

反射调用脚本的方法

CREATE TABLE `groovy_script` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `script_name` varchar(64) NOT NULL COMMENT 'script name',
  `script_content` text NOT NULL COMMENT 'script content',
  `status` varchar(16) NOT NULL DEFAULT 'ENABLE' COMMENT 'ENABLE/DISENABLE',
  `extend_info` varchar(4096) DEFAULT NULL,
  `created_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `modified_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='groovy script';
INSERT INTO book_shop2.groovy_script
(id, script_name, script_content, status, extend_info, created_time, modified_time)
VALUES(1, 'groovyService', 'import com.example.demo.groovy.GroovyService
            class HelloServiceImpl implements GroovyService {
				@Override
				String sayHello() {
					return "sayHello";
				}
                @Override
                String sayHello(String name) {
                    return "Hello " + name + ". Welcome to static script in Groovy.";
                }
            }', 'ENABLE', NULL, '2020-09-26 17:16:36.477818000', '2022-09-04 22:54:51.421959000');
@RestController
public class GroovyController {
    @Autowired
    GroovyScriptMapper groovyScriptMapper;
    @GetMapping("/aaaa")
    private String groovyTest() throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
        GroovyScript groovyScript = this.groovyScriptMapper.getOne(1L);
        System.out.println(groovyScript.getScriptContent());
        Class clazz = new GroovyClassLoader().parseClass(groovyScript.getScriptContent());
        Object o = clazz.newInstance();
        SprinGContextUtils.autowireBean(o);
        Method method = clazz.getMethod("sayHello", String.class);
        String aaaaaaa = (String) method.invoke(o, "aaaaaaa");
        System.out.println(aaaaaaa);
        return aaaaaaa;
    }
}
public interface GroovyScriptMapper extends BaseMapper<GroovyScript> {
    @Select({"select script_content from groovy_script where id = #{id}"})
    @Result(column = "script_content", property = "scriptContent")
    GroovyScript getOne(Long id);
}
@Component
public class SpringContextUtils implements ApplicationContextAware {
    static ApplicationContext context;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtils.context = applicationContext;
    }
    public static void autowireBean(Object bean) {
        context.getAutowireCapableBeanFactory().autowireBean(bean);
    }
    public static ApplicationContext getContext() {
        return context;
    }
    public static <T> T getBean(Class<T> clazz) {
        return context.getBean(clazz);
    }
    public static <T> T getBean(String name) {
        return (T) context.getBean(name);
    }
}

到此这篇关于Springboot中动态语言groovy介绍的文章就介绍到这了,更多相关Springboot groovy内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Springboot中动态语言groovy介绍

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

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

猜你喜欢
  • Springboot中动态语言groovy介绍
    目录GroovypomResourceScriptSourceDatabaseScriptSourceGroovy Groovy是一种基于Java的语法的基于JVM的编程语言。Gro...
    99+
    2024-04-02
  • Groovy动态语言使用教程简介
    目录Groovy 简介Groovy 应用Groovy 与 JavaGroovy语法特性(相比于Java)Groovy 简介 Groovy 是构建在 JVM 上的一个轻量级却强大的动态...
    99+
    2024-04-02
  • Jython vs Groovy:动态语言之争
    语法 Jython基于Python语法,而Groovy基于Java语法。对于来自不同编程背景的开发人员来说,这可能是最重要的区别。Jython的语法更简单、更简洁,类似于Python。Groovy的语法更复杂,与Java类似,包括类型检查...
    99+
    2024-03-15
    Jython
  • C语言动态内存管理介绍
    目录前言:C 语言为内存的分配和管理提供了几个函数:1.malloc() 用法2.calloc() 用法3.realloc() 与 free() 用法前言: 简单记录一下,内存管理...
    99+
    2024-04-02
  • 关于C语言动态内存管理介绍
    目录1.为什么需要动态内存分配2.有关动态内存函数介绍2.1 malloc和free2.2 calloc函数2.3 realloc函数3. 常见的动态内存错误3.1 对NULL指针进...
    99+
    2024-04-02
  • Python语言介绍
    本文章可以让我们快速了解 python 语言的历史,及以后发展状态,职业方向。文章收录网上内容:http://www.cnblogs.com/lidong94/p/5478032.html (Python介绍)http://3060674....
    99+
    2023-01-31
    语言 Python
  • 在Java中如何使用groovy语言作为动态规则表达式
    小编给大家分享一下在Java中如何使用groovy语言作为动态规则表达式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!由于在工作流设计中需要为条件分支设定条件表达...
    99+
    2023-06-17
  • Java中轻量级规则引擎Groovy介绍
    一、场景描述 假如在开发一个充值功能,需要支持经常变化的充值营销活动,产品提出了以下需求: 根据不同季节,不同节日做不同的充值送活动,以及不定期的优惠活动。 还需要根据用户的等级以及用户以往的充值历史做不同的营销活动。 能够灵活的配置营销活...
    99+
    2023-09-02
    java 开发语言
  • C++动态联编介绍
    目录一、静态联编和动态联编1.指针和引用类型的兼容性2.虚函数的工作原理文章转自:公众号:Coder梁(ID:Coder_LT) 一、静态联编和动态联编 当我们使用程序调用函数的时候...
    99+
    2024-04-02
  • SpringBoot整合Groovy脚本实现动态编程详解
    目录Groovy简介应用场景集成与使用第一步、与SpringBoot集成1、pom.xml文件如下:第二步、写出Groovy版本的“Hello World”1...
    99+
    2024-04-02
  • DML、DDL、DCL语言介绍
    DML、DDL、DCL介绍是什么? DML:数据操作语言 包括增删改查(INSERT,DELETE,UPDATE,SELECT),对数据进行操作的语言。DML的操作单位是记录(RECORD)。 INSE...
    99+
    2024-04-02
  • C语言常量介绍
    目录什么是常量常量都有哪些这四种常量的特点、注意事项等等1.字面常量:2.const修饰的常变量3.#define定义的标识符常量4.枚举常量总结什么是常量 从字面上简单解释就是不变...
    99+
    2024-04-02
  • C++编程语言中stringstream类介绍
    stringstream是C++标准库中的一个类,用于处理字符串的输入输出。它是基于内存缓冲区的输入输出流,可以将字符串转换为各种类...
    99+
    2023-09-09
    C++
  • C语言中.与->的用法介绍
    目录(一)基础(二)例子(三)总结(一)基础 结构体用点,结构体指针用箭头。 a->b 的含义是 (*a).b 。  现代的标...
    99+
    2023-05-20
    C语言中.与->的区别 C语言->用法
  • Go语言中DateTime的用法介绍
    一、基本使用 ①从属于time这个包 ②一般使用都是使用 time.Time 这个类型表示时间 ,time包中还有一些常量,源码如下 // Common durations. The...
    99+
    2024-04-02
  • C语言中static的使用介绍
    目录1.static 可以修饰局部变量2. static 可以修饰全局变量3.static 可以修饰函数总结1.static 可以修饰局部变量 首先让我看看这段代码 #inclu...
    99+
    2024-04-02
  • Go语言中的Beego框架介绍
    Beego是一个基于MVC架构的Go语言Web框架,它提供了一整套的解决方案来简化Web应用程序的开发。Beego内置了很多功能模块,如路由、ORM、Session等,同时也提供了很多...
    99+
    2024-04-02
  • 基础知识:编程语言介绍、Python介绍
    2018年3月19日 今日学习内容: 1、编程语言的介绍 2、Python介绍 3、安装Python解释器(多版本共存) 4、运行Python解释器程序两种方式。(交互式与命令行式)(♥♥♥♥♥) 5、变量(♥♥♥♥♥) 6、数据类型的基...
    99+
    2023-01-31
    基础知识 编程语言 Python
  • JavaAOP动态代理详细介绍
    目录1.IOC与AOP概念2.为何使用动态代理2.1 JDK原生动态代理2.1.1 MathService接口类2.1.2 MathServiceImpl实现接口类2.1.3 Pro...
    99+
    2024-04-02
  • Java动态代理简单介绍
    目录1.代理模式2.静态代理实现3.动态代理实现1.代理模式 当我们需要调用某个类(具体实现类)的方法时,不直接创建该类的对象,而是拿到该类的代理类对象,通过代理对象,调用具体实现类...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作