多模块工程应该这样使用mybatisplus
如果公司会经常创建项目,但是想将一些公共的功能抽取出来,封装成jar
放到私服。其他项目需要使用时直接去引用,这样可以避免很多问题。例如:不写重复业务逻辑,项目更新是只需要更新一套源码,所有项目即可更新。员工看不到完整的源码,包好源码安全等等问题。经过大企业的员工都知道,很多大企业都是这样搞的,但是这样搞会比较耗费时间,但是可以理解的。
如果在多个工程中实现这样的功能,我们会面临着在父工程中操作数据库的业务吧,会遇到对象如何注入spring
容器的问题吧。当你遇到这些问题的时候,一定要将问题解决在问题出处,千万不要留给下面的开发人员。如果你把问题留下来,如果面对的开发人员是个新手该怎么办,这样会让新员工去看的你开发文档,是一件不乐观的事情。所以开发父工程的时候,关于配置的全部给默认值,下面的开发人员可以根据需求配置,不配置也没问题,只有这样才会给开发人员减轻技术压力。
废话不多说,直接上码,咋们码上说话。呵呵,那是不可能的,开会两小时,撸码五分钟。
在我们写springboot
应用是,都会在启动类上打上 @SpringBootApplication
这个注解。需要注意:这个注解只能扫描当前包及其子包,那么我们写的是一个父工程,明显这个注解是扫描不到的,这就意味着程序中 @Service
、@Component
这种注解就不能扫描到,对象就不能注入spring
容器了。我们该怎么办呢?
在 @SpringBootApplication
注解上面的 @ComponentScan
注解是干嘛的,该注解标识的类, 会被 Spring
自动扫描并且装入bean
容器。他是可以直接指定包扫描的把,那么我们是不是可以直接在启动类上添加这个注解,指定父工程的包路径呢?你指定的父工程是扫描到了,没问题了。但是当前工程出问题了,自动配置失效了。你还需要指定当前工程的扫描包。这显然不是一个好的解决方法,我们要求是不把问题留给后面的开发人员嘛。
问题出现在哪里,我们就在哪里把问题解决,并要留给后面的人。
既然面临的问题是父工程扫描不到,那么我们就在父工程中创建一个配置文件,在这个配置文件上使用 @ComponentScan
注解指定包扫描。这就就可以将该工程的@Service
、@Component
这些注解表示的类注入spring
容器了。这个配置文件是写好了,spring
怎么加载呢?spring
怎么知道我们这个是配置文件,需要加载呢?在该工程的 resources/META-INF/spring.factories
文件中指定配置文件,这样配置文件才会生效。
另外还可以手动注入的方式,在配置文件上使用 @Configuration
注解,手动将对象注入spring
容器,如果对象很多,建议使用包扫描。当然了,我们采用这用方式手动注入,就没有必要再需要注入的对象上写@Service
、@Component
这些注解了。
父工程中使用mybatisplus
,其他的不在多说,直接参考mybatisplus-spring-boot的配置。这里需要注意的是mapper
接口,平时我们都直接在mapper
接口上打 @Mapper
注解,或者在配置文件上使用 @MapperScan
扫描 mapper
接口。但是很开心的告诉你,这里使用 @Mapper
注解是不行的,必须使用 @MapperScan
扫描。这个注解直接在刚才创建的配置文件上写上就行,没有必要再去创建一个配置文件了。
综上所述,在父工程中用springboot
结合MP
一起使用时,需要注意两天,1、对象注入spring
容器的问题,2、mapper
接口扫描的问题。对象注入spring
容器可以选中手动注入,也可以自动注入。mapper
接口只能使用 @MapperScan
注解扫描mapper
包,使用 @Mapper
是没有效果的。