SpringBoot中使用核心服务项目问题

摘要

在springBoot中使用第三方项目jar提供服务,SpringBoot无法实例化jar中的beans.

背景:

A项目是一个SpringBoot架构的项目,是一个对外提供api服务,使用shiro作为权限管理,mybatis作为数据层。项目包名称com.cc.dd

B项目是一个Springmvc+mybatis架构的项目,分为四层,controller,service,dao,entity 4个模块,项目包名com.aaa.bbb,使用xml文件配置beans。


现在把B项目service,dao,entity 3个模块,使用maven编译3个jar包,在A项目中使用,能够让A项目调研B项目service层提供的服务。



问题1:SpringBoot如何管理引入的3个jar包,也就是SpringBoot如何初始化3个jar中的bean,只有初始化之后才能使用。

 在springBoot启动类直接导入B项目管理管理beans的xml文件,因为B项目采用的spring+beans.xml的模式管理bean,所以初始化bean的工作全部都xml文件中配置,因此springBoot只需要根据xml文件就能够初始化B项目的实例。如下代码,xml文件根据项目实际名称配置。    

@ImportResource(locations = {"classpath*:*-Context.xml"})
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

问题2 :如果A项目采用了spring注解的方式 管理Beans,配置方式就是下面这样了  。增加扫描A项目包的路径,因为springBoot默认只扫描启动内所在的包路径及其子目录,A项目的包结构和B项目完全不一样,如果不手动增加组件扫描路径,

SpringBoot不会主动数扫描你jar中的bean类的。

@SpringBootApplication
@ComponentScan(basePackages={"com.cc.dd"})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

问题3:由于A项目使用的mybatis,B项目也使用了mybatis,因此在项目启动的时候,会出现一个bean对应了多个SqlSessionFactory的问题,B项目的Dao无法选择唯一一个SqlSessionFactory,因此在B项目的创建SessionFactory的时候,增加@Primary 注解。

@Primary的意思是在多个相同的bean中,优先使用用@Primary注解的bean,因此B项目优先使用自己项目中的bean.


image.png




IT家园
IT家园

网友最新评论 (0)