springboot——springboot的自动配置原理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40663800/article/details/80391539

版权声明:转载请附上本文链接,谢谢。 https://blog.csdn.net/weixin_40663800/article/details/80391539


在我们使用springboot的时候,感觉很方便,它提倡的 '习惯优于配置' 给开发人员带来了很大的方便。但是当一些小白在使用的时候,经常不理解是如何实现自动配置的。

在spring中提供了一种基于条件来配置bean的方式来实现bean的配置。其实springboot也基于了这个来实现。


spring基于条件配置bean

    spring提供了条件注解@Conditional,该注解根据满足某一个条件来实现创建一个特定的bean。

    实例:下面实例将以不同的操作系统为条件来创建不同的bean。我们将通过实现Condition接口,并重写其matches方法来构建判断条件。

        1:定义判断条件:

                            

                            

        2:不同系统下要实现的bean

                                    

        3:配置类的实现

                                    

                            代码解释:

                                    @configuration注解配置类,通过@Conditional注解,符合哪个条件则创建对应的bean

        4:运行测试

                                           


springboot运行原理

    关于springboot的运行原理,我们可以通过查看@SpringBootApplication注解,这个注解是一个组合注解,它的核心功能是有@EanbleAutoConfiguration注解提供的。

看下@EanbleAutoConfiguration的源码:

                                                    

源码里面可以看出,这是一个组合注解,其中关键功能是@Import注解的导入配置功能。EnableAutoConfigurationImportSelector使用SpringFctoriesLoader.loadFactoryNames方法来扫描具有META-INF/spring.factories文件,此文件中声名了有哪些自动配置。

                                        

核心注解

    springboot的运行原理看起来很简单,其实还有很多核心的注解。

    其实打开spring.factories文件中随便哪一个自动配置,都可以发现有很多注解,尤其是上面说到的基于条件来创建bean的注解的使用。

                                            

                                            以上的注解其实都是组合了@Condition注解,只是传入不同的条件类。

案列分析

    通过以上的了解,现在我们来找一个案列来分析一下springboot是如何实现自动配置的。我们来分析一下http编码的自动配置。

    常规配置http编码,是在web.xml当中配置一个filter:

                                                  

    实现springboot自动配置:

        1:配置参数,类型安全配置的方式。

            springboot有类型安全配置。springboot的自动配置也是基于了这一点。这里的配置类里面的参数可以直接在application.properties中设置。

            源码如下:

                                                    

        2:配置bean

                                                


实战

    通过上面的理解,我们可以写一个简单的例子来测一下。这里举一个简单的例子,包含当某个类存在的时候自动配置这个类的bean,并可将该bean的属性在applicationg.peoperties中进行配置。

    首先要创建starter的maven项目。

                                                    

    并且在pom文件中要增加springboot的自动配置的依赖。

                                                           

    1:属性配置类,类型安全配置,可在application.properties中配置参数。

                                        

                                        类型安全的配置,在application.properties中通过hello.msg来配置msg参数的值。默认为hello.msg=world。

    2:判断依据类。

                                        

    3:自动配置类

                                        

        通过注解@EnableConfigurationProperties开始属性配置,可以在appicationg.properties中配置HelloServiceProperties类的参数。

        通过注解@ConditionalOnClass判断HelloService.class在类路径下条件时。

        通过注解@ConditionalOnProperty判断当在application.properties中设置hello=enabled设置条件符合,默认为true,也是条件符合。

    4:注入配置类

        如果想要是自动配置生效,在分析springboot运行原理的时候我们就知道了,需要在METE-INF/spring.factories中注册配置类。

                                    

    5:测试

                                        

                                        

                                        

                                    

展开阅读全文

没有更多推荐了,返回首页