侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

SpringBoot自动配置

2023-12-08 星期五 / 0 评论 / 0 点赞 / 21 阅读 / 5866 字

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面介绍下开发环

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面

  • 介绍下开发环境
    • JDK版本1.8
    • springboot版本是1.5.2
    • 开发工具为 intellij idea(2018.2)
    • 开发环境为 15款MacBook Pro

前言

很多时候,我们在公司用springboot作为基础框架开发项目的时候,会遇见依赖jar的时候,别的jar里面需要创建一些bean,往往不是很方便,我们需要通过 @ComponentScan 注解来扫描,才能创建上,这时候,自动配置就派上用场了,官方文档上有介绍(需要细细看才能找到),估计很多朋友还不知道,这边写个教程,给各位作参考


如何弄自动配置呢?

这次,我们只在同一个项目内配置,只做演示自动配置,如果是jar,依葫芦画瓢,然后上传到maven私服,普通springboot项目依赖该jar即可

  1. 我们先创建一个普通的spring-boot项目,记得添加web依赖,否则,项目不会后台运行

    	<dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-web</artifactId>     </dependency>
  2. 创建一个测试自动配置的类(不跟启动类一个目录下,最好单独创建一个目录)

    @Configuration(value = "testAutoConfiguration")public class TestAutoConfiguration {  private static final Logger LOGGER = LoggerFactory.getLogger(TestAutoConfiguration.class);  public TestAutoConfiguration() {      LOGGER.warn("创建 TestAutoConfiguration 成功");  }}
  3. 然后我们在启动类配置下,查看是否会打印创建 TestAutoConfiguration Bean的日志记录

    @SpringBootApplication// 实现接口 CommandLineRunner 实现 run 方法,这样,项目一启动就会执行run方法内容public class SpringbootAutoConfigurationApplication implements CommandLineRunner {	 private static final Logger LOGGER = LoggerFactory.getLogger(SpringbootAutoConfigurationApplication.class);	 @Autowired	 private ApplicationContext context;	 public static void main(String[] args) {	 	 SpringApplication.run(SpringbootAutoConfigurationApplication.class, args);	 }	 @Override	 public void run(String... strings) throws Exception {		 for (String name : context.getBeanDefinitionNames()) {   		 	// 如果存在Bean名称为 testAutoConfiguration 则打印Bean的名称			if("testAutoConfiguration".equals(name)){				LOGGER.info(name);			}		 }	 }}
  4. 接下来,我们启动项目,查看日志打印,会发现,并没有打印创建 TestAutoConfiguration 跟打印Bean名称的日志,表示没有 TestAutoConfiguration 并没有注册到IOC上,然后我们增加自动配置


增加自动配置

使用自动配置,我们需要配置的东西很少,也就新增下文件

自动配置官方文档地址如下: 自动配置官方文档

  1. 我们需要在 resources 下创建一个目录名叫 META-INF 接着在里面创建一个叫 spring.factories 的文件,里面内容如下:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=/// 配置你需要自动配置的文件路径,如果多个文件,用 ,/ 分割com.example.AutoConfiguration.TestAutoConfiguration
  2. 理论上我们还需要在启动类上面配置注解 @EnableAutoConfiguration 但是注解 @SpringBootApplication 已经包含了该注解,所以我们不需要配置该注解 @SpringBootApplication 注解源码如下:

    @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration//已经包含了开启自动配置注解@EnableAutoConfiguration@ComponentScan(excludeFilters = {		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {    ......
  3. 然后,我们启动项目,查看日志,发现打印了应该打印的日志,说明自动配置成功

    2018-10-18 00:30:22.616  WARN 636 --- [           main] c.e.A.TestAutoConfiguration              : 创建 TestAutoConfiguration 成功2018-10-18 00:30:22.780  INFO 636 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup2018-10-18 00:30:22.834  INFO 636 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)2018-10-18 00:30:22.838  INFO 636 --- [           main] d.SpringbootAutoConfigurationApplication : testAutoConfiguration2018-10-18 00:30:22.842  INFO 636 --- [           main] d.SpringbootAutoConfigurationApplication : Started SpringbootAutoConfigurationApplication in 1.93 seconds (JVM running for 2.42)

结束语

下篇介绍了springboot的条件配置,博客地址:spingboot条件配置

项目源码,我已经上传到gitee 需要的朋友,可以自己点击查看 springboot自动配置

到这,文章就结束了!

以上,均为本人测试而得出的结果,可能会有出入,或者错误,欢迎指正

欢迎转载,请注明出处跟作者,谢谢!

广告 广告

评论区