文档章节

SpringBoot自动配置

贺小五
 贺小五
发布于 2018/10/18 00:40
字数 1025
阅读 561
收藏 7

本篇介绍下,如何通过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 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自动配置

到这,文章就结束了!

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

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

© 著作权归作者所有

共有 人打赏支持
贺小五

贺小五

粉丝 70
博文 42
码字总数 43196
作品 0
海淀
程序员
私信 提问
加载中

评论(5)

贺小五
贺小五

引用来自“罗祥”的评论

我这边进行了实例测试,在没有一增加自动配置的情况下,一样可以打印创建 TestAutoConfiguration 跟打印Bean名称的日志

引用来自“贺小五”的评论

不好意思,工作原因,并未太关注博客,你说的不增加自动配置,一样可以打印TestAutoConfiguration 是因为你跟Springboot的入口,XXAppliction在一个路径下,默认是会通过 ComponentScan 扫描到,所以,是会被注册上的,但是如果不在一个路径下,那么你不指定,是扫描不到的,希望能帮助到你

引用来自“罗祥”的评论

TestAutoConfiguration跟启动类没放在一个目录下
能否贴一下,两者类路径?而且,我这只是举例,实际博客想表达的是,别人引用你的jar,不需要配置任何东西,就能开箱即用的那种..
罗祥
罗祥

引用来自“罗祥”的评论

我这边进行了实例测试,在没有一增加自动配置的情况下,一样可以打印创建 TestAutoConfiguration 跟打印Bean名称的日志

引用来自“贺小五”的评论

不好意思,工作原因,并未太关注博客,你说的不增加自动配置,一样可以打印TestAutoConfiguration 是因为你跟Springboot的入口,XXAppliction在一个路径下,默认是会通过 ComponentScan 扫描到,所以,是会被注册上的,但是如果不在一个路径下,那么你不指定,是扫描不到的,希望能帮助到你
TestAutoConfiguration跟启动类没放在一个目录下
贺小五
贺小五

引用来自“罗祥”的评论

我这边进行了实例测试,在没有一增加自动配置的情况下,一样可以打印创建 TestAutoConfiguration 跟打印Bean名称的日志
不好意思,工作原因,并未太关注博客,你说的不增加自动配置,一样可以打印TestAutoConfiguration 是因为你跟Springboot的入口,XXAppliction在一个路径下,默认是会通过 ComponentScan 扫描到,所以,是会被注册上的,但是如果不在一个路径下,那么你不指定,是扫描不到的,希望能帮助到你
loyal
loyal

引用来自“罗祥”的评论

我这边进行了实例测试,在没有一增加自动配置的情况下,一样可以打印创建 TestAutoConfiguration 跟打印Bean名称的日志
你肯定测试的不对.
罗祥
罗祥
我这边进行了实例测试,在没有一增加自动配置的情况下,一样可以打印创建 TestAutoConfiguration 跟打印Bean名称的日志
恒宇少年/spring-boot-chapter

简书整套文档以及源码解析 专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组件 002 Spring Cloud 核心技术 对Spring Cloud核心技术全面讲解 003 Quer...

恒宇少年
2018/04/19
0
0
springboot情操陶冶-初识springboot

前言:springboot由于其轻便和去配置化等的特性已经被广泛应用,基于时代潮流以及不被鄙视,笔者于是开辟此篇开始认识springboot 前话 springboot是基于spring而开发的轻量级框架,所以在学习...

南柯问天
2018/07/24
0
0
《Spring Boot 实战:从0到1》第2章 快速开始Hello World

第2章 快速开始Hello World 大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML。在二十世纪初期,新兴Java技术——Spring,横空出世。使用极简XML和POJO(...

程序员诗人
2017/08/01
0
0
SpringBootBucket 1.0.0 发布,SprintBoot 全家桶

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
7.3K
17
springboot 是如何帮我们省去web.xml配置的

概述 最开始使用原生的springmvc时,总是免不了有如下xml配置 但是,切换到springboot之后,web.xml之类的繁琐的配置基本上都不见了。出于好奇研究了下springboot究竟帮我们做了什么,我们可...

端吉
2018/06/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

🛠️Hanjst/汉吉斯特更新加JavaScript运行时优化等

这是 Hanjst/汉吉斯特 发布以来的首个主要升级更新版本。这次的主要升级更新的内容包括移除HTML Comments注释行, 优化在 Hanjst include模板文件时的JavaScript运行时环境。 Hanjst 在设计和...

wadelau
35分钟前
0
0
OSChina 周六乱弹 —— 舔狗是没有好下场的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听什么# #今天听这个# 分享 Nirvana 的歌曲《Smells Like Teen Spi...》 《Smells Like Teen Spi...》- Nirvana 手机党少...

小小编辑
今天
198
8
Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
2
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部