SpringBoot自动配置

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

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

前言

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


如何弄自动配置呢?

此次,咱们只在同一个项目内配置,只作演示自动配置,若是是jar,依葫芦画瓢,而后上传到maven私服,普通springboot项目依赖该jar便可git

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

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

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

    @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上,而后咱们增长自动配置框架


增长自动配置

使用自动配置,咱们须要配置的东西不多,也就新增下文件maven

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

  1. 咱们须要在 resources 下建立一个目录名叫 META-INF 接着在里面建立一个叫 spring.factories 的文件,里面内容以下:spring-boot

    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 startup
    2018-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 : testAutoConfiguration
    2018-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自动配置

到这,文章就结束了!

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

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

相关文章
相关标签/搜索