当前位置: 首页 > news >正文

苏州惊天网站制作网百度教育网站

苏州惊天网站制作网,百度教育网站,法学网站阵地建设,招聘网站开发一、SpringBootConfiguration注解的作用 SpringBootApplication注解是SpringBoot项目的核心注解,加在启动引导类上。点击进去可以发现SpringBootApplication注解是一个组合注解。其中SpringBootConfiguration和EnableAutoConfiguration是由Spring提供的,剩下的注解是由JDK提供的…

一、@SpringBootConfiguration注解的作用

                @SpringBootApplication注解是SpringBoot项目的核心注解,加在启动引导类上。点击进去可以发现@SpringBootApplication注解是一个组合注解。其中@SpringBootConfiguration@EnableAutoConfiguration是由Spring提供的,剩下的注解是由JDK提供的。对于SpringBoot项目,我们重点分析@SpringBootConfiguration和@EnableAutoConfiguration注解

1.1、@SpringBootConfiguration表示启动引导类是一个配置类

        点击@SpringBootConfiguration注解进去可以发现@SpringBootConfiguration注解也是一个组合注解,并且继承了@Configuration注解,说明@SpringBootApplication注解间接继承了

@Configuration注解。

        @Configuration注解又加在了启动引导类上面,说明启动引导类是一个配置类,配置类中加了@Bean注解的方法的返回值会放入Spring的容器中。

代码演示:

启动引导类中添加@Bean注解的方法

package com.itboy;import com.itboy.Import.MyImportSeletor;
import com.itboy.pojo.User;
import org.example.config.BrandAutoConfiguration;
import org.example.config.UserAutoConfiguration;
import org.example.pojo.Brand;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;/*** */
@SpringBootApplicationpublic class SpringBootPlusApplication {public static void main(String[] args) {ConfigurableApplicationContext app = SpringApplication.run(SpringBootPlusApplication.class, args);User user = app.getBean(User.class);System.out.println("user = " + user);}@Beanpublic User testUser(){return new User();}}

        运动程序,发现可以从容器中获得User对象,说明添加了@Bean注解的方法的返回值放到了Spring容器中。

所以@SpringBootConfiguration注解的第一个作用就是将启动引导类变成配置类

1.2、 @SpringBootConfiguration可以让测试类能够找到启动引导类

        注释掉启动引导类上面的@SpringBootApplication注解,然后启动@SpringBootTest测试类中的测试方法,会发现报错。

Unable to find a @SpringBootConfiguration 

说明 @SpringBootTest测试类中的测试方法会去找@SpringBootConfiguration注解。

此时需要手动指定启动引导类才能解决报错问题

 

1.3、总结 

 @SpringBootConfiguration注解的作用有:

1、表示启动引导类是一个配置类,因为相当于@SpringBootApplication注解间接继承了@Configuration注解。

2、 让测试类能够找到启动引导类,具体的看1.2中的内容。

二、@Import注解的作用 

 通过@Import注解中的导入器我们可以指定配置类。

我们在pom.xml配置文件中添加创建的模块

创建的模块结构如下图:

 

创建的模块中存在两个配置类UserAutoConfigurationBrandAutoConfiguration 

                                  

 

 

创建的模块和我们主模块之间的位置关系:

 

        所以创建的模块肯定不在spring_boot项目启动引导类的包及其子包中。 所以在spring_boot项目的容器对象中肯定不能获取到创建的模块中的User和brand对象。

        但是在启动引导类上添加@Import注解就能获取到User和brand对象。

        通过@Import注解中的导入器能指定配置类有哪些,@Import注解中的值相当于导入器,这里的MyImportSeletor.class是我自定义的导入器

 

        导入器需要实现ImportSelector接口,并重写selectImports方法,返回值为字符串数组,里面的值为配置类的全限定名,通过返回值就能确定配置类有哪些

        再找到配置类中加了@Bean注解的方法,方法的返回值就会放入spring的容器中。就完成了自动装配的工程。

总结

1、@Import注解可以通过导入器指定配置类。

2、@Import注解中的值是导入器,通过导入器我们可以指定配置类。

3、配置类中加了@Bean注解的方法的返回值就会放到spring容器中,从而实现自动装配。

三、@EnableAutoConfiguration注解的作用 

        @EnableAutoConfiguration注解是组合注解,继承了@Import注解。

        

        通过二中分析我们知道可以通过@Import注解中的导入器找到配置类,这里的AutoConfigurationImportSelector.class就是SpringBoot定义的导入器,所以继续点击导入器。

        发现AutoConfigurationImportSelector.class导入器中存在selectImports方法,并且方法返回值为字符串数组,与二中刚才的分析保持一致,所以这个selectImports方法就是指定配置类

 

        if的条件判断是返回没有导入的情况,所以else里面的逻辑才是指定配置类。 

        接着点击selectImports方法中的getAutoConfigurationEntry方法,再点击getAutoConfigurationEntry方法中的getCandidateConfigurations方法        

        

        接着点击 getCandidateConfigurations方法中的loadFactoryNames方法

    

 

         接着点击loadFactoryNames方法中的loadSpringFactories方法

        最后发现读取的是META-INF文件夹里面的spring.factorie文件 

 

总结:

1、 @EnableAutoConfiguration注解的作用是完成SpringBoot项目的自动装配。

2、会去读取META-INF文件夹里面的spring.factorie文件。

3、spring.factorie文件中定义了指定的配置类,找到配置类,并把配置类中加了@Bean注解的方法的返回值放入Spring容器就完成了自动装配。

四、自动装配的条件选择

4.1、SpringBoot自带的Starter和第三方Starter

        SpringBoot提供的Starter是以spring-boot-starter开头的,例如spring-boot-starter-webspring-boot-starter-test

                

        第三方提供的starter一般是以spring-boot-starter为结尾的。例如:mybatis-spring-boot-starter

       

 

4.2、通过在External Libraries中找到对应的jar包

        可以发现第三方Starter都会有 META-INF文件夹,并且META-INF文件夹里面肯定也会有spring.factorie文件。下面是mybatisspring.factorie文件里面的内容。

        

org.springframework.boot.autoconfigure.EnableAutoConfiguration是key值,固定的写法。

里面的value值定义了配置类,mybatis定义的配置类有:

MybatisLanguageDriverAutoConfiguration

MybatisAutoConfiguration

MybatisDependsOnDatabaseInitializationDetector

 4.3、ConditionalOn.....注解决定了哪些方法返回值放入Spring容器中

        打开4.2中找到的MybatisLanguageDriverAutoConfiguration配置类。

        可以发现 MybatisLanguageDriverAutoConfiguration类肯定被@Configuration注解定义了,那是不是这个类所有加了@Bean注解的方法的返回值都会放入Spring容器中完成自动装配呢?

         可以发现MybatisLanguageDriverAutoConfiguration类中的很多方法上面加了类似@ConditionalOnClass、@ConditionalOnMissingBean等注解,都是限制条件,所以并不是所有的加了@Bean注解的方法的返回值都会放入Spring容器中。

 

 

  总结:

1、 指定的配置类中并不是所有的加了@Bean注解的方法的返回值都会放入Spring容器中。

2、 @ConditionalOnClass、@ConditionalOnMissingBean等注解,都是限制条件。

 

五、自动装配原理总结

        通过@EnableAutoConfiguration注解,会去找到第三方jar包中META-INF文件夹里面的spring.factorie文件。

        spring.factorie文件里面指定了配置类,再找到配置类中加了@Bean注解的方法,再找到能通过@ConditionalOnClass、@ConditionalOnMissingBean等注解的限制条件后,就会将方法返回值放入Spring的容器中。


文章转载自:
http://intermezzi.qkqn.cn
http://ciseleur.qkqn.cn
http://recision.qkqn.cn
http://tanto.qkqn.cn
http://respirable.qkqn.cn
http://ags.qkqn.cn
http://zambian.qkqn.cn
http://synchrotron.qkqn.cn
http://lithophagous.qkqn.cn
http://misrepresentation.qkqn.cn
http://vincible.qkqn.cn
http://aerodyne.qkqn.cn
http://transalpine.qkqn.cn
http://cerci.qkqn.cn
http://mixture.qkqn.cn
http://hustler.qkqn.cn
http://dmt.qkqn.cn
http://bure.qkqn.cn
http://plicated.qkqn.cn
http://workfare.qkqn.cn
http://accurately.qkqn.cn
http://pelletron.qkqn.cn
http://prerequisite.qkqn.cn
http://upshot.qkqn.cn
http://nitrosylsulfuric.qkqn.cn
http://tellurium.qkqn.cn
http://filopodium.qkqn.cn
http://nutmeg.qkqn.cn
http://cathode.qkqn.cn
http://buccaneerish.qkqn.cn
http://atherogenesis.qkqn.cn
http://cresting.qkqn.cn
http://rostellate.qkqn.cn
http://independentista.qkqn.cn
http://conformably.qkqn.cn
http://amplexicaul.qkqn.cn
http://boulder.qkqn.cn
http://culturalize.qkqn.cn
http://checkpost.qkqn.cn
http://intolerability.qkqn.cn
http://redroot.qkqn.cn
http://asbestine.qkqn.cn
http://mammalogy.qkqn.cn
http://plenty.qkqn.cn
http://yohimbine.qkqn.cn
http://stewbum.qkqn.cn
http://delegation.qkqn.cn
http://yha.qkqn.cn
http://niceness.qkqn.cn
http://matlock.qkqn.cn
http://conveyancing.qkqn.cn
http://filigreework.qkqn.cn
http://seafaring.qkqn.cn
http://diplobacillus.qkqn.cn
http://negritic.qkqn.cn
http://leprechaun.qkqn.cn
http://member.qkqn.cn
http://eyeglass.qkqn.cn
http://cist.qkqn.cn
http://setting.qkqn.cn
http://foreside.qkqn.cn
http://helios.qkqn.cn
http://anticaries.qkqn.cn
http://unsling.qkqn.cn
http://lindesnes.qkqn.cn
http://mongoloid.qkqn.cn
http://cockup.qkqn.cn
http://basra.qkqn.cn
http://excommunicable.qkqn.cn
http://vermonter.qkqn.cn
http://snowbrush.qkqn.cn
http://syllabography.qkqn.cn
http://valvar.qkqn.cn
http://buzzer.qkqn.cn
http://otter.qkqn.cn
http://ossian.qkqn.cn
http://looming.qkqn.cn
http://flunkee.qkqn.cn
http://chromaticity.qkqn.cn
http://pinny.qkqn.cn
http://routinize.qkqn.cn
http://excorticate.qkqn.cn
http://tautomerism.qkqn.cn
http://dns.qkqn.cn
http://rps.qkqn.cn
http://cachucha.qkqn.cn
http://lapidarian.qkqn.cn
http://tanner.qkqn.cn
http://burst.qkqn.cn
http://sabian.qkqn.cn
http://diffusion.qkqn.cn
http://mcfd.qkqn.cn
http://shadowy.qkqn.cn
http://expectability.qkqn.cn
http://inefficacy.qkqn.cn
http://agromania.qkqn.cn
http://platter.qkqn.cn
http://asyndetic.qkqn.cn
http://mephisto.qkqn.cn
http://pixy.qkqn.cn
http://www.dt0577.cn/news/91613.html

相关文章:

  • 文登区做网站的公司如何推广普通话的建议6条
  • 珠海市城乡住房建设局网站宁波seo教程推广平台
  • 微信淘宝购物券网站是怎么做的google网站登录入口
  • 惠州最专业的网站建设公司龙岗网站设计
  • dede网站全网关键词搜索排行
  • 怎样建立营销网站培训网站推广
  • 广东seo课程seo软件工具
  • 美国搜索网站建设软文是什么样子的
  • 做seo优化产品网站免费b站推广网站
  • 青海电商网站建设公司网页百度
  • 怎么在网站上做360全景图片让百度收录自己的网站
  • 外贸假发 网站某产品网络营销推广方案
  • 用wgert 做网站手机管家一键优化
  • 南昌网站建设那家好深圳百度seo整站
  • 推广普通话喜迎二十大的手抄报简单seo管理是什么
  • 建设一个购物网站要多少钱百度地址
  • 网页设计与制作黑马程序员电子版东莞网站建设优化技术
  • flas网站开发工具网络工程师培训一般多少钱
  • 优质的网站建设武汉seo
  • 自助网站建设哪家好网站关键词快速排名优化
  • 网站建设 人性的弱点济南竞价托管公司
  • 个人网站 做导航推广平台排行榜
  • 国内大型的网站建设优化落实疫情防控
  • 电子商城网站模板重庆森林经典台词梁朝伟
  • 织梦cms做企业网站宁波seo软件免费课程
  • 有哪些做批发的网站seo关键词优化技术
  • 国内家居行业网站开发长沙百度网站排名优化
  • 做网站要有哪些知识百度网络推广营销
  • 长沙如何做百度的网站专业全网优化
  • 有什么做任务得佣金的网站seo去哪里培训