`
jiopi
  • 浏览: 32321 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

让Spring支持类库的统一部署和自动升级

阅读更多

起因

在传统项目中,项目所需的类库都被部署在运行时环境的lib目录,如果要更新一个类库Jar,则需要替换所有运行时环境的lib目录

如果项目中仅有部分程序需要用到新版本的特性,而新版本又有较大改动,则不得不修改所有用到该类库的代码 

 

 

解决

JIOPi引入标准模块库机制,允许将模块程序分版本放入模块库,当模块库更新时,所有使用点将自动更新类库程序

类似OSGi的模块隔离加载机制,允许在一个系统中同时运行一个模块(同名类)的多个版本 

 

 

 

 

 

 

参考阅读:使用JIOPi模块库实现类库自动升级

使用JIOPi的标准模块库,可以实现类库的统一部署和自动升级,但是要在代码中引入JIOPi的API程序

并且在IoC流行的今天,这种做法无疑会失去很多IoC的优点 

 

 

 

 

JIOPi只希望扩充特性,但并不想改变甚至弱化现有编程风格

JIOPi可以完全嵌入在Spring内,既不改变现有编程风格,又可让Spring支持类库的统一部署和自动升级 

 

 

特别说明

块库http://jiopi.vip7.es163.net/ibean/resourcepools/jiopi-ibean.xml

的jiopi.ibean.helloworld.i模块已经将版本更新为0.1.0.2,以支持Spring装配的演示

如果你已经运行过之前的jiopi.ibean.helloworld.i模块并关闭了容器的自动升级功能,则需要打开自动升级以下载最新版本的模块程序 

 

 

前提

为了使用Spring IoC,你的模块程序必须将访问API独立打包为一个Jar,并且在将模块程序部署在JIOPi模块库时,仅部署实现类相关的Jar,而不部署API的Jar包,而在项目的lib内部署 API的Jar包 

 

 

这个过程有点像发布一个远程模块,你需要在项目内部署远程模块的访问API,而实现类则是部署在另一台服务器

与远程模块不同的是,JIOPi的模块库最终还是在本地执行,而不是远程服务器,所以,你可以使用Spring对获取到的模块对象进行二次装配(即接口并不提供set方法,而其实实现类是实现了set方法的),这是远程模块无法实现的 

 

 

下面我们就来看看如何使用Spring IoC来运行iBean的HelloWorld程序 

JIOPi风格的代码参见: http://www.iteye.com/topic/655312

 

安装Spring 3

本演示使用了Spring 3的类库,以使用变参函数让代码更易读

需要以下文件:

commons-logging-1.1.1.jar

org.springframework.asm-3.0.1.RELEASE-A.jar

org.springframework.beans-3.0.1.RELEASE-A.jar

org.springframework.context-3.0.1.RELEASE-A.jar

org.springframework.core-3.0.1.RELEASE-A.jar

org.springframework.expression-3.0.1.RELEASE-A.jar 

 

 

其他Jar

iBeanWithJIOPi-0.1.0.1.jar 当然你还需要JIOPi的实现容器

blueprint-helloworld-0.1.jar HelloWorld的接口Jar 

 

以上jar和演示程序可以从iBean的项目SVN中获取 

http://ibean.googlecode.com/svn/trunk/ibean-show/

 

HelloWorld的源码在:
http://ibean.googlecode.com/svn/trunk/ibean-example/

 

 

配置Spring Bean 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"  "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="jiopi" singleton="false" class="org.jiopi.framework.CentralConsole" factory-method="accessControlPanel"/>
    <bean id="helloworld" singleton="false"
    	class="org.jiopi.framework.CentralConsole" factory-method="accessControlPanel">
    	<constructor-arg type="java.lang.String"><value>jiopi.ibean.helloworld.i</value></constructor-arg>
    	<constructor-arg type="java.lang.String"><null/></constructor-arg>
    	<constructor-arg type="java.lang.String"><value>org.jiopi.ibean.example.module.helloworld.HelloWorldImpl</value></constructor-arg>
    	<constructor-arg type="java.lang.Class"><value>org.jiopi.ibean.example.blueprint.helloworld.HelloWorld</value></constructor-arg>
    	<constructor-arg type="java.lang.Object[]"><list></list></constructor-arg>
    	<property name="msg"><value>spring msg</value></property>
    </bean>
</beans>

 

说明:

jiopi配置了一个通用模块加载器,你可以通过Spring代理来获取JIOPi模块库中的类,而避免在代码中引入JIOPi的API 

 

helloworld配置了一个加载好的org.jiopi.ibean.example.module.helloworld.HelloWorldImpl对象

并且可以由Spring对加载好的对象进行二次装配:

<property name="msg"><value>spring msg</value></property> 

 

调用代码

使用Spring后,你只需要从Spring容器内获取对象即可,而无需访问JIOPi的API 

 

//直接获取配置好的Bean,使用Spring二次装配
HelloWorld hw = appContext.getBean("helloworld",HelloWorld.class);
hw.helloWorld();

//JIOPi隐含调用,默认构造函数
HelloWorld jiopiHw = (HelloWorld) appContext.getBean("jiopi","jiopi.ibean.helloworld.i",null,"org.jiopi.ibean.example.module.helloworld.HelloWorldImpl", HelloWorld.class,new Object[]{});
jiopiHw.helloWorld();

//JIOPi隐含调用,使用带一个参数的构造函数
HelloWorld jiopiHwMy = (HelloWorld) appContext.getBean("jiopi","jiopi.ibean.helloworld.i",null,"org.jiopi.ibean.example.module.helloworld.HelloWorldImpl", HelloWorld.class,new Object[]{"my msg"});
jiopiHwMy.helloWorld(); 

 

 

总结

将JIOPi嵌入Spring,你既可以享受远程模块带来的优点

实现类无需部署在运行环境

实现类的更新后所有使用环境自动生效

可以存在同一功能的多个版本的远程服务

 

 

也可以像使用本地类库那样充分使用Spring的各种特性

 

而你也并不会因此而改变你的代码风格

分享到:
评论

相关推荐

    spring osgi相关资源

    3. 提供了丰富的库支持:包含了Spring框架、Hibernate、Tomcat等常见库,方便开发和部署。 四、spring-osgi-1.2.1-with-dependencies.zip 这个文件包含了Spring OSGi的核心库和其依赖,主要包含以下几个部分: 1. ...

    spring-framework-v2.5+v5.1.rar

    - AOP增强:Spring 2.5引入了基于注解的面向切面编程(AOP),使得开发者可以更方便地在类和方法上声明切面,无需编写XML配置。 - @Autowired:这个注解简化了依赖注入,自动匹配类型,减少了手动配置。 - 更强的...

    Spring与OSGI整合 计算器例子(转) +附整合代码和spring-osgi核心jar

    这些JAR文件通常包含了Spring对OSGI环境的支持,比如Spring DM(Dependency Manager),它是Spring在OSGI环境下的扩展,用于处理服务的注册、发现和依赖管理。 在实际操作中,整合Spring和OSGI的过程可能包括以下...

    Spring Boot中文文档(基于1.4.1翻译)

    - Spring Boot简化了基于Spring的应用开发,它自动配置Spring和第三方库,让开发者可以迅速上手开发应用。 - Spring Boot旨在快速启动和运行新项目,旨在减少样板代码和配置。 #### 2. 系统要求 - Spring Boot项目...

    Eclipse Spring IDE

    2. **代码完成和导航**:自动补全Spring相关的类、方法和属性,以及快速导航到相关源码,提高开发效率。 3. **Spring项目向导**:创建新Spring项目、Maven项目或基于Spring Boot的项目的快速引导。 4. **Spring Bean...

    Spring Boot技术知识点:Spring Boot2.7以上支持使用Swagger3

    随着版本的升级,Spring Boot引入了对新特性和工具的支持。在Spring Boot 2.7及以上版本,它开始支持Swagger 3,这是一个强大的API文档工具,帮助开发者构建清晰、易于理解的RESTful API接口。 Swagger 3,也称为...

    spring-tool-3.7.0

    尽管JDK 1.8及以上版本提供了更多的新特性,但为了确保广泛兼容性和稳定性,"spring-tool-3.7.0"选择支持JDK 1.7,这使那些尚未升级到更高版本JDK的用户也能利用Spring Boot的优势。 Eclipse Kepler是Eclipse IDE的...

    spring boot 中文文档

    整体而言,Spring Boot中文文档为读者提供了从基础到高级的详细指南,涵盖了安装、开发、运行和部署Spring Boot应用的方方面面。文档的深度和广度对于初学者和有经验的开发者都具有相当的价值,是学习和使用Spring ...

    spring-boot-reference.pdf

    Spring Boot是一个开源的Java基础框架,它为Spring平台和第三方库提供了默认配置,旨在简化新Spring应用的初始搭建以及开发过程。其核心优势包括自动配置、无需代码生成以及可与Spring生态系统无缝集成。文档的描述...

    spring boot reference guide

    它根据应用的类路径依赖和其它的条件来自动配置Spring和第三方库,从而简化了配置过程。不过,文档也明确表示,自动配置并不是完全自动化,开发者仍然需要进行必要的配置和微调。 最后,Spring Boot Reference ...

    spring jar包 下载(史上最全)

    虽然不是直接提及,但了解Spring Boot也很重要,它是基于Spring框架构建现代Java应用的快速启动器,简化了配置和部署过程。 9. **测试工具** Spring框架包含了丰富的测试支持,如单元测试、集成测试工具,使得...

    spring5.x+springmvc5.x+mybatis3.5x+tomcat9+jdk8+maven 项目框架搭建 1.1版本

    它可以自动下载所需的库,生成项目结构,以及执行各种构建任务。 集成这些组件的过程通常包括以下步骤: 1. **创建Maven项目**:首先,我们需要使用Maven创建一个新的Java Web项目,定义项目结构和依赖。 2. **...

    spring boot 官方文档

    这得益于其预设的大量默认配置,使得开发人员在构建一个Spring应用程序时,可以立即开始编码,无需配置繁琐的Spring和第三方库配置。 2. 该框架支持快速开发,适用于生产环境的应用程序。Spring Boot不仅提供了快速...

    spring-framework4.3.0

    此外,Spring MVC还引入了模板方法设计模式,使得控制器类的编写更加简洁,同时支持了更多的注解,如`@CrossOrigin`用于处理跨域请求,以及`@JsonView`用于JSON视图的定制。 在依赖注入(Dependency Injection,DI...

    spring 3.0api

    Spring 3.0还增强了对Maven的支持,提供了一套Maven插件,方便项目构建和部署。同时,Spring 3.0还引入了Profile概念,允许根据环境条件来激活或禁用配置。 总的来说,Spring 3.0 API文档详细阐述了这些特性和接口...

    spring-boot使用指南

    Spring Boot 支持使用配置类来组织应用的配置信息,这有助于保持代码的整洁和模块化。 #### 自动配置 Spring Boot 的自动配置机制是其核心特性之一,它能够根据已有的依赖项自动配置应用程序。此外,还可以通过排除...

    spring-boot中文参考指南

    - **配置类**:如何定义和使用Spring Boot的配置类。 - **自动配置**: - **逐步替换自动配置**:逐步覆盖默认配置。 - **禁用特定的自动配置**:根据需要关闭某些自动配置功能。 - **Spring Beans和依赖注入**:...

    spring-dm.jar

    5. **模块化**: 通过spring-dm,Spring应用可以被划分为多个独立的bundle,每个bundle可以独立部署和升级,增强了系统的可维护性和可扩展性。 **三、spring-osgi-1.2.1-with-dependencies** 这个压缩包包含了...

Global site tag (gtag.js) - Google Analytics