Advertisement

在 JDK8 中使用 SpringBoot 动态编译 Java 源码并注入容器

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:ZIP


简介:
本文介绍了如何利用Spring Boot和JDK 8的功能,在运行时动态地编译Java源代码,并将其注入到Spring IoC容器中,实现灵活的代码扩展。 在 JDK8 下的 SpringBoot 应用中可以通过动态编译 Java 源码并将其注入到 Spring 容器来实现对接口和抽象类的实时调整。当项目以 Jar 包形式启动时,需要通过命令行引入 tools.jar 的包;而在 IDEA 中可以直接调试。 为了不停机地修改代码中的接口或抽象类实现,可以将更新后的源码文件放置于指定目录下,并读取这些文件执行动态编译方法来重新加载该类。新的类可以在 Spring 容器中注册并仅在当前窗口生效。如果重启了服务或应用,则需要重新编译代码进行部署;也可以手动编译使其临时有效。 启动时使用的命令为: ``` java -Xbootclasspath/a:C:\Program Files\Java\jdk1.8.0_341\jre\lib\tools.jar -jar dynamic-demo.jar ```

全部评论 (0)

还没有任何评论哟~
客服
客服
  • JDK8 使 SpringBoot Java
    优质
    本文介绍了如何利用Spring Boot和JDK 8的功能,在运行时动态地编译Java源代码,并将其注入到Spring IoC容器中,实现灵活的代码扩展。 在 JDK8 下的 SpringBoot 应用中可以通过动态编译 Java 源码并将其注入到 Spring 容器来实现对接口和抽象类的实时调整。当项目以 Jar 包形式启动时,需要通过命令行引入 tools.jar 的包;而在 IDEA 中可以直接调试。 为了不停机地修改代码中的接口或抽象类实现,可以将更新后的源码文件放置于指定目录下,并读取这些文件执行动态编译方法来重新加载该类。新的类可以在 Spring 容器中注册并仅在当前窗口生效。如果重启了服务或应用,则需要重新编译代码进行部署;也可以手动编译使其临时有效。 启动时使用的命令为: ``` java -Xbootclasspath/a:C:\Program Files\Java\jdk1.8.0_341\jre\lib\tools.jar -jar dynamic-demo.jar ```
  • JDK8释的文翻
    优质
    《JDK8源码及注释的中文翻译》为Java开发者提供了深入理解JDK8内部实现的机会,书中详细解释了核心API与类库的运作机制,帮助读者提升编程技能和问题解决能力。 唯一构造函数。程序员不能调用此构造函数。它由编译器在响应枚举类型声明时生成的代码使用。

    这段描述解释了构造函数的作用及其被使用的场景,强调其仅供编译器内部使用,并非供外部程序直接调用。

  • 内存和运行Java
    优质
    本文章介绍了如何在Java程序运行时动态地编译并执行Java代码的技术,涉及内存中的类加载与方法调用等核心概念。 不需要任何Java类文件,在内存中输入字符串并进行编译、加载和执行,整个过程都在内存中完成,不会生成.java或.class文件,实现了无污染的效果。
  • 使mingw73_64为Qt的MySql驱
    优质
    本项目采用MINGW73_64编译器,针对Qt环境定制开发了MySQL数据库驱动的动态链接库,旨在提升Windows平台下C++应用程序与MySQL数据库交互的效率和便捷性。 Qt版本:5.12.12 编译器版本:MinGW73-64 说明:已经编译好的MySql驱动动态库包含四个文件: - libqsqlmysql.a - libqsqlmysqld.a - qsqlmysql.dll - qsqlmysqld.dll 使用方式:将这四个文件复制到D:\Qt\Qt5.12.12\5.12.12\mingw73_64\plugins\sqldrivers路径下即可(注意这是我的Qt安装路径)。
  • VSCode使VS2017
    优质
    本教程介绍如何在VSCode编辑器中配置和使用Visual Studio 2017提供的编译器进行代码构建与调试,适合需要跨平台开发环境的用户。 感觉VSCode不错,打算研究一下如何在VSCode中配置使用VS2017编译器。
  • 装配bean到Controller
    优质
    本教程详细介绍了如何在Spring框架中动态创建Bean,并将其注入到控制器类中,实现灵活的应用程序配置和管理。 根据需求有时需要动态装配bean并注入到Controller中。这里有两种方法:一是通过xml文件配置(例如ApplicationContext.xml),二是使用@PostConstruct注解方式。
  • 使Unity创建Word图片
    优质
    本教程将指导您如何利用Unity开发平台创作互动式内容,并在Microsoft Word文档中整合文本与图像,提升项目的专业展示效果。 Unity创建并写入Word文档并且插入图片的源码如下: 1. 首先需要使用到的命名空间: ```csharp using System.IO; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; ``` 2. 创建一个新Word文件或打开现有Word文件的方法示例(此处以创建为例): ```csharp public static void CreateAndWriteDocument(string filePath) { using (WordprocessingDocument document = WordprocessingDocument.Create(filePath, DocumentType.Document)) { // 添加主文档部分 MainDocumentPart mainPart = document.AddMainDocumentPart(); mainPart.Document = new Document(new Body()); // 获取Body元素,以便添加内容 Body body = mainPart.Document.Body; // 创建一个段落并设置其文本 Paragraph p1 = new Paragraph( new Run( new Text(这是用Unity创建的Word文档))); // 将该段落添加到Body中 body.Append(p1); } } ``` 3. 插入图片的方法示例: ```csharp public static void InsertImage(string documentPath, string imagePath) { using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(documentPath, true)) { MainDocumentPart mainPart = wordDoc.MainDocumentPart; ImagePart imagePart = mainPart.AddImagePart(ImageFormat.Jpeg); System.IO.FileStream fs = new FileStream(imagePath, FileMode.Open); using(fs) imagePart.FeedData(fs); AddPictureReference(mainPart.GetIdOfParts(imagePart), Title, 2000, 1500); // 参数分别为图片id,标题和宽度高度 } } private static void AddPictureReference(string relationshipId, string title, uint width, uint height) { MainDocumentPart mainDoc = wordDoc.MainDocumentPart; Drawing drawing = new Drawing(); Inline inline = new Inline() { DistanceFromTop = 0, DistanceFromBottom = 0, DistanceFromLeft = 0, DistanceFromRight = 0 }; Extent extent = new Extent() { Cx = width, Cy = height }; EffectExtent effectextent = new EffectExtent() { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L }; Blip blip = new Blip() { Embed = relationshipId, CompressionState=BlipCompressionValues.Print }; NonVisualDrawingProperties nonVisualDrawingProps = new NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = title }; ApplicationNonVisualDrawingProperties applicationNonVisualDrawingProps = new ApplicationNonVisualDrawingProperties(); // 添加到Inline对象中 inline.Append(effectextent, extent, nonVisualDrawingProps, applicationNonVisualDrawingProps, blip); // 将Inline添加到Picture对象并插入文档Body内 Picture picture = new Picture() { Lock=LockValues.No }; picture.Append(inline); mainDoc.Document.Body.InsertAfter(picture, null); } ``` 以上代码示例展示了如何使用Unity创建Word文件、写入文本以及插入图片的基本流程。注意,为了使这些方法有效运行,请确保已正确安装和引用了相关库(如DocumentFormat.OpenXml)。
  • 使线
    优质
    在线编译器是一种基于互联网的工具,允许用户编写、编辑和执行编程代码,而无需安装特定软件。它支持多种编程语言,方便学习与开发。 这段文字描述的内容是关于如何在MVC框架下巧妙使用在线编译器,并强调代码应简洁明了、通俗易懂。
  • KDDockWidgets VS2019 下的库及
    优质
    本教程详细介绍了如何在VS2019环境下编译和构建KDDockWidgets的动态链接库及其源代码,适合开发者学习参考。 本DLL及示例编译环境为:VS2019+Qt5.15.2 64位版本。不支持32位系统使用!DLL根据是否基于Quick或QWidget分为两种不同版本,对应的头文件也不相同,请勿混用。example目录下包含两个演示demo,每个demo中都有一个KDDockWidgets文件夹,在自己的项目中直接添加 KDDockWidgets.pri到工程即可使用。更多说明请参考相关博客文章。
  • MatlabVS2013
    优质
    本教程介绍如何在MATLAB环境中集成Visual Studio 2013编译器,涵盖配置步骤及常见问题解决方法。适合需要使用C/C++进行MEX文件开发的研究者和工程师学习参考。 在MATLAB中添加VS2013编译器的方法可以参考相关教程文档。具体步骤请参见关于如何配置MATLAB与Visual Studio 2013编译器结合使用的指南,该指南详细介绍了所需环境的搭建过程和注意事项。