Skip to content

Latest commit

 

History

History
74 lines (39 loc) · 3.57 KB

模块化.md

File metadata and controls

74 lines (39 loc) · 3.57 KB

模块化的实现、好处、框架

模块化框架: osgi、jarslink、java9等

模块化好处: 便于项目管理,解耦:开发、测试、交付、升级,引用其他类库都可以独立进行

OSGI: https://www.infoq.cn/article/modular-java-dynamic-modularity

javaagent使用 + 字节码修改框架 动态代理和静态代理:参考quickstart-proxy/doc java探针javaAgent的使用 java的热部署和热加载:联系、区别、原理、使用场景 java热加载:VirtualMachine、Attach、Agent、Instrumentation:只能修改方法体,不能修改的的结构,不能变更方法签名、增加和删除方法/类的成员属性

热部署:一般是使用自定义的ClassLoader来加载应用,类似tomcat中配置的context,检测到class文件有变化,就重新加载项目,并替换之前的classloader 热加载:就是通过Attach技术使用javaagent来重新加载类,retransformClasses对于已经加载的类重新进行转换处理,即会触发重新加载类定义,或者使用字节码修改框架来实现类 热部署可以进行模块化开发:比如可以进行同一个类的不同版本的加载,不同项目的加载(依赖jar版本不一样),直接进行不同版本的jar加载 模块可以是一个类的不同版本、不同的包路径下的代码、同一个jar的不同版本,同一个项目的不同模块,任何一个 Java 类库

premain 以vm参数的形式载入,在程序main方法执行之前执行 其jar包的manifest需要配置属性Premain-Class

agentmain 以vm参数的形式载入,在程序main方法执行之前执行 其jar包的manifest需要配置属性Premain-Class


OSGI(面向Java的动态模型系统)

OSGi(开放服务网关协议,Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范。 OSGI百度百科

ClassLoader可以实现的功能: 1、自定义加载类,实现切面功能、代码保护加解密等 2、 3、热部署功能

类层次划分,OSGi,热部署,代码加密等领域

Java模块化框架OSGI

比较常见的场景就是隔离,比如早些年比较火的Java模块化框架OSGI,把每个Jar包以Bundle的形式运行,每个Bundle有自己的类加载器(不同Bundle可以有相同的类名),Bundle与Bundle之间起到隔离的效果,同时如果一个Bundle依赖了另一个Bundle的某个类,那这个类的加载就委托给导出该类的BundleClassLoader进行加载;又比如Tomcat容器,每个WebApp有自己的ClassLoader,加载每个WebApp的ClassPath路径上的类,一旦遇到Tomcat自带的Jar包就委托给CommonClassLoader加载;对于公司的一些核心类库,可能会把字节码加密,这样加载类的时候就必须对字节码进行解密,可以通过findClass读取URL中的字节码,然后加密,最后把字节数组交给defineClass()加载。

资源隔离 热部署 代码保护