spring 分模块开发简单实践

 

spring 分模块开发

背景
      我们一般采用spring+struts+ibatis的开发模式,使用spring统管业务bean,当项目很大时,面临一个bean命名冲突问题,如果和struts一样,采取分模块的方式,不同的模块有自己的命名空间,将会避免几个并行开发的子系统或模块共用一套bean配置文件时id产生重名的问题。

简单方案
     整个系统所使用的公共bean,例如数据源、事务管理、iBatis或hibernate的引擎、国际化资源文件等,放在一个root context文件中, 构造一个根ApplicationContext实例,作为各子模块的父,这里就看出Spring设计上的易扩展性了,ApplicationContext的构造子允许通过一个父实例来创建。
   
    核心类 ContextHelper ,作为管理器类,如下:
    
 public class ContextHelper {
    private static Map _contexts ;
    private static ApplicationContext _rootContext;
    private static final String ROOT_CONTEXT = "conf/rootContext.xml";
 
   static {
      _contexts = new HashMap();
      try{
        _rootContext = new ClassPathXmlApplicationContext(ROOT_CONTEXT);
      } catch (Exception e) {
        throw new ContextException(e);
      }
   }

   public static synchronized Object getBean(String configName, String beanName) {
      ApplicationContext context = getApplicationContext(configName);
      Object bean = context.getBean(beanName);
      return bean;
   }
   //lazyload
   private static synchronized ApplicationContext getApplicationContext(String  configName) {
     if(_contexts.containsKey(configName)) {
       return (ApplicationContext) _contexts.get(configName);
     }
     //这里规定了模块配置文件的命名规则
     String moduleConfigFile = "conf/" + configName + ".bean.xml";
     String [] configs = { moduleConfigFile};
     ApplicationContext context = new ClassPathXmlApplicationContext(configs,_rootContext);
     _contexts.put(configName, context);
     return context;
   }
 
   //消息资源文件管理

  public static String getMessage(String key,Object[] arg,Locale l){
    return _rootContext.getMessage(key,arg,l);
  } 
}

   需要注意的一点是,各子模块bean配置文件中,如果引用根配置中的bean,不可以使用local属性了,请使用bean=“dataSource“,一开始没注意到这个问题,总报错,无法正确合并,我调试了好久才发现。

ToDo

  上述方案还比较简陋,主要的隐患在于,各模块之间的通信问题,当前的设计比较适用于各模块耦合度较小的情况,如果有一些bean,供几个模块之间共用,势必也需要提至rootContext.xml中配置,大大增加了根文件的复杂性。
  另外,可供改进处还有一个,每个模块应该允许采用多个bean配置文件,允许将dao、service等tier分开来处理,可以通过建立一个properties文件,将模块逻辑名与若干配置文件建立映射关系来解决。我得承认,当前的简版方案在context load上有一些hard code的坏气味。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Spring Boot 2.7.15的模块开发,您可以使用Spring Boot的模块化特性来将您的应用程序拆为多个模块,每个模块具有自己的功能和职责。 在Spring Boot中,您可以使用Maven或Gradle等构建工具来管理您的模块化项目。每个模块都可以是一个单独的子项目,具有自己的依赖关系和配置。 以下是一些模块开发的步骤和示例: 1. 创建一个父项目: 首先,您可以创建一个父项目,用于管理所有的子模块。这个父项目可以是一个简单的Maven或Gradle项目。 2. 创建子模块: 在父项目下,您可以创建多个子模块,每个子模块代表一个特定的功能或模块。您可以使用Maven或Gradle的子模块功能来创建和管理这些子模块。 3. 定义依赖关系: 在每个子模块的配置文件(例如pom.xml或build.gradle)中,您可以定义该模块所需要的依赖关系。这些依赖关系可以是其他子模块、第三方库或其他项目。 4. 模块间通信: 您可以使用Spring Boot提供的各种通信方式来实现模块间的交互。例如,您可以使用@RestController注解创建RESTful API,然后在其他模块中调用这些API。 5. 构建和运行: 使用构建工具(如Maven或Gradle)来构建您的模块化项目。您可以为每个子模块单独构建,也可以一次性构建所有模块。然后,您可以运行您的应用程序并测试各个模块的功能。 这只是关于Spring Boot模块开发简单介绍。实际上,模块开发涉及到更多细节和最佳实践,您可以根据您的具体需求和项目结构进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值