学过springboot的同学应该都已经或多或少了解过springboot的自动装配原理了,这里就不过多赘述了,大致结果就是spring.factorice中指定的类最终会被自动装配到springboot的容器中。(其实是我自己也只是大致理解,怕说错,hhhhh,等我细致学习了就来写博客补作业!!)
这里我们来讲一讲如何将自己写的模块中的类自动配置到SpringBoot的容器中。
目录
创建spring.factories文件,指定需要自动装配的类
在配置文件application.properties中填写配置
建立一个自己的模块(被依赖的模块)
我建立的模块叫my-module,随便叫什么都行,因为是演示什么我依赖都没选,如果有需要还请勾选需要的模块。
新建一个类,为它设置参数的配置
为它添加上属性,根据习惯提供无参构造、setter/getter。再提供一个toString方便我们查看。添加@ConfigurationProperties注解,注解的value值是可以按需求填写,这个值是将来在配置文件中使用的key的前缀(如:我这里是syyrjx.user,将来会通过syyrjx.user.id来为自动创建的对象注入id值) ,这个注解会有报错红线,因为我们还没有将这个类注册到容器中,无伤大雅。
我们看见上面有一个红色的提示,它会教我们如何生成配置文件提示(我已经在下面整理好了)。
将这些配置cv到pom文件中,这里已经整理出来
将以下配置放到<dependencies>(注意不是<dependencyManagement>标签下的<dependencies>)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
将以下配置放到<build>下的<plugins>中,如果没有就建一个
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<proc>none</proc>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
创建spring.factories文件,指定需要自动装配的类
在main目录下新建一个文件夹(叫什么都可以,我这里叫factories/),在这个文件夹下建立文件sping.factories,在里面指定需要自动装配的类(多个类使用英文逗号,隔开,我这里偷偷创建了一个Book类流程和User一样就不细嗦了)
在pom文件中声明刚刚建立的factories目录是资源目录,这个目录下的文件编译后存放在/META-INF/目录下(有时候比较奇怪会导致resouces目录别标为不是资源目录,我们需要重新声明recources是资源目录),其实,直接在resouces下建立/META-INF/spring.factories也是可以的,但是我之前尝试的时候,它会导致spring-boot-configuration-processor组件生成的文件没有地方放,后来重新尝试又是可以生成的,所以最后还是采用了pom文件指定的这种方法。
<resources>
<resource>
<directory>src/main/factories</directory>
<includes>
<include>spring.factories</include>
</includes>
<targetPath>/META-INF/</targetPath>
</resource>
<!--声明resources为资源目录-->
<!-- <resource>-->
<!-- <directory>src/main/resources</directory>-->
<!-- <includes>-->
<!-- <include>*.*</include>-->
<!-- </includes>-->
<!-- </resource>-->
</resources>
然后我们compile这个模块,如果需要在本工程外的工程引用就需要install。生成的target目录下有一个自动装配的配置文件和为properties配置文件提供提示的配置文件。
被依赖的模块就创建完成了!接下来去引入这个模块看看自动配置和属性注入能否实现!!!
新建一个springboot模块
这个模块依赖刚刚创建的模块
在pom文件中引入my-module模块依赖
在配置文件application.properties中填写配置
在主启动类中获取对象并打印查看
可以看到这里的对象是我们在my-module模块中创建的类的实例化,属性是从本模块的配置文件中注入的。