SpringBoot自动配置
本篇介绍下,如何通过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即可
-
我们先创建一个普通的spring-boot项目,记得添加web依赖,否则,项目不会后台运行
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
-
创建一个测试自动配置的类(不跟启动类一个目录下,最好单独创建一个目录)
@Configuration(value = "testAutoConfiguration") public class TestAutoConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(TestAutoConfiguration.class); public TestAutoConfiguration() { LOGGER.warn("创建 TestAutoConfiguration 成功"); } }
-
然后我们在启动类配置下,查看是否会打印创建
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); } } } }
-
接下来,我们启动项目,查看日志打印,会发现,并没有打印创建
TestAutoConfiguration
跟打印Bean名称的日志,表示没有TestAutoConfiguration
并没有注册到IOC上,然后我们增加自动配置
增加自动配置
使用自动配置,我们需要配置的东西很少,也就新增下文件
自动配置官方文档地址如下: 自动配置官方文档
-
我们需要在
resources
下创建一个目录名叫META-INF
接着在里面创建一个叫spring.factories
的文件,里面内容如下:org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ // 配置你需要自动配置的文件路径,如果多个文件,用 ,\ 分割 com.example.AutoConfiguration.TestAutoConfiguration
-
理论上我们还需要在启动类上面配置注解
@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 { ......
-
然后,我们启动项目,查看日志,发现打印了应该打印的日志,说明自动配置成功
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自动配置
到这,文章就结束了!
以上,均为本人测试而得出的结果,可能会有出入,或者错误,欢迎指正
欢迎转载,请注明出处跟作者,谢谢!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SpringBoot系列之使用自定义注解校验用户是否登录
记得今年年初刚开始面试的时候,被问的最多的就是你知道Spring的两大核心嘛?那你说说什么是AOP,什么是IOC?我相信你可能也被问了很多次了。 1、到底是什么是AOP? 所谓AOP也就是面向切面编程,能够让我们在不影响原有业务功能的前提下,横切扩展新的功能。这里面有一个比较显眼的词我们需要注意一下,横切,它是基于横切面对程序进行扩展的。 2、AOP相关术语 在Spring的AOP中有很多的术语,而且容易混淆,大家一定要先搞清楚这几个概念: 连接点(Joinpoint):在程序执行过程中某个特定的点,比如类初始化前、类初始化后,方法调用前,方法调用后; 切点(Pointcut):所谓切点就是你所切取的类中的方法,比如你横切的这个类中有两个方法,那么这两个方法都是连接点,对这两个方法的定位就称之为切点; 增强(Advice):增强是织入到连接点上的一段程序,另外它还拥有连接点的相关信息; 目标对象(Target):增强逻辑的织入目标类,就是我的增强逻辑植入到什么位置; 引介(Introduction):一种特殊的增强,它可以为类添加一些属性喝方法; 织入(Weaving):织入就是讲增强...
- 下一篇
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)
GenerativeAdversarialNetwork 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development in deep learning…The most important one, in my opinion, is adversarial training (also called GAN for Generative Adversarial Networks). This, and the variations that are now being proposed is the most interesting idea in the last 10 years in ML, in my opinion.”–Yann LeCun 那么我们就看看GAN究竟是怎么回事吧: 如上图所示,GAN包含两个互相对抗的网络:G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址