最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

全面解析SpringBoot自動(dòng)配置的實(shí)現(xiàn)原理

 更新時(shí)間:2017年05月21日 19:39:52   投稿:mrr  
這篇文章主要介紹了全面解析SpringBoot自動(dòng)配置的實(shí)現(xiàn)原理的相關(guān)資料,需要的朋友可以參考下

之前一直在用SpringBoot框架,一直感覺(jué)SpringBoot框架自動(dòng)配置的功能很強(qiáng)大,但是并沒(méi)有明白它是怎么實(shí)現(xiàn)自動(dòng)配置的,現(xiàn)在有空研究了一下,大概明白了SpringBoot框架是怎么實(shí)現(xiàn)自動(dòng)配置的功能,我們編寫(xiě)一個(gè)最簡(jiǎn)單的自動(dòng)配置功能,大概的總結(jié)一下.

一,配置屬性類(lèi)

其實(shí)就是值對(duì)象注入的方式去配置一些Spring常用的配置,我們編寫(xiě)一個(gè)最簡(jiǎn)單的配置對(duì)象。

@ConfigurationProperties(prefix = "hello")
//@Component //如果這里添加了注解那么在自動(dòng)配置類(lèi)的時(shí)候就不用添加@enableConfigurationProperties(HelloProperties.class)注解.
public class HelloProperties {
  private String msg="default";//現(xiàn)在我們?cè)谂渲梦募?xiě)hello.msg=world,因?yàn)楹?jiǎn)單就不再展示;如果那么默認(rèn)為default.
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
}

這是一個(gè)簡(jiǎn)單的屬性值對(duì)象,那么相當(dāng)于寫(xiě)死的字段就是SpringBoot為我們自動(dòng)配置的配置,那么我們很多時(shí)候可以自己在application.properties中修改某些配置就是這樣的道理,我們不設(shè)置就是默認(rèn)的,設(shè)置了就是我們?cè)O(shè)置的屬性。

二,自動(dòng)配置類(lèi)

上面已經(jīng)構(gòu)建了我們簡(jiǎn)單的屬性對(duì)象,那么現(xiàn)在我們要通過(guò)屬性對(duì)象得到相應(yīng)的屬性值將其注入到我們的Bean中,這些Bean也就是一些SpringBoot啟動(dòng)后為我們自動(dòng)配置生成的Bean,當(dāng)然SpringBoot優(yōu)先使用我們配置的Bean這個(gè)功能是如何實(shí)現(xiàn)的,我們往下看一下就明白了。

首先我們需要一個(gè)功能Bean,可以把這個(gè)Bean看做是SpringBoot框架啟動(dòng)后在容器里面生成的為我們服務(wù)的內(nèi)置Bean,簡(jiǎn)單的寫(xiě)一個(gè)。

//@Component  這里很重要,如果我們添加了這個(gè)注解那么,按照我們下面的設(shè)置SpringBoot會(huì)優(yōu)先使用我們配置的這個(gè)Bean,這是符合SpringBoot框架優(yōu)先使用自定義Bean的原則的。
public class HelloService {
  private String msg = "service";//如果自動(dòng)配置沒(méi)有讀入成功,那么為默認(rèn)值
  public String say() {
    return "hello " + msg;
  }//為我們服務(wù)的方法
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
}

現(xiàn)在編寫(xiě)我們的自動(dòng)配置類(lèi)。

@Configuration //配置類(lèi)
@EnableConfigurationProperties(HelloProperties.class)//這里就是前面說(shuō)的,這個(gè)注解讀入我們的配置對(duì)象類(lèi)
@ConditionalOnClass(HelloService.class)//當(dāng)類(lèi)路徑存在這個(gè)類(lèi)時(shí)才會(huì)加載這個(gè)配置類(lèi),否則跳過(guò),這個(gè)很有用比如不同jar包間類(lèi)依賴(lài),依賴(lài)的類(lèi)不存在直接跳過(guò),不會(huì)報(bào)錯(cuò)
public class HelloAutoConfiguration {
  @Autowired
  private HelloProperties helloProperties;
  @Bean
  @ConditionalOnMissingBean(HelloService.class)//這個(gè)配置就是SpringBoot可以優(yōu)先使用自定義Bean的核心所在,如果沒(méi)有我們的自定義Bean那么才會(huì)自動(dòng)配置一個(gè)新的Bean
  public HelloService auto(){
    HelloService helloService =new HelloService();
    helloService.setMsg(helloProperties.getMsg());
    return helloService;
  }
}

好了現(xiàn)在自動(dòng)配置的類(lèi)也寫(xiě)好了,我們可以啟動(dòng)一下SpringBoot應(yīng)用,測(cè)試一下。

三,測(cè)試自動(dòng)配置

@SpringBootApplication
@RestController
public class MyRun {
  @Autowired
  private HelloService helloService;
  @RequestMapping("/auto/home")
  public String home(){
    return helloService.say();
  }
  public static void main(String[] args) {
    SpringApplication.run(MyRun.class,args);
  }
}

ok ,運(yùn)行后訪問(wèn)你會(huì)看到:

hello world

代表我們的自動(dòng)配置功能成功。

四,SpringBoot管理自動(dòng)配置

其實(shí)在很多時(shí)候我們的配置是在很多jar包里的,那么我們新的應(yīng)用該怎么讀入這些jar包里的配置文件呢,SpringBoot是這樣管理的。

最主要的注解就是@enableAutoConfiguration,而這個(gè)注解會(huì)導(dǎo)入一個(gè)EnableAutoConfigurationImportSelector的類(lèi),而這個(gè)類(lèi)會(huì)去讀取一個(gè)spring.factories下key為EnableAutoConfiguration全限定名對(duì)應(yīng)值.

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\
org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\
org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\
org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration

所以如果需要我們可以在我們的resources目錄下創(chuàng)建spring.factories下添加類(lèi)似的配置即可。。

以上所述是小編給大家介紹的SpringBoot自動(dòng)配置的實(shí)現(xiàn)原理,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • SpringBoot+MyBatis-Plus+Dynamic-Datasource讀寫(xiě)分離完整指南

    SpringBoot+MyBatis-Plus+Dynamic-Datasource讀寫(xiě)分離完整指南

    在SpringBoot項(xiàng)目中,使用MyBatis-Plus和Dynamic-Datasource實(shí)現(xiàn)讀寫(xiě)分離是一種常見(jiàn)且高效的架構(gòu)選擇,下面就來(lái)詳細(xì)介紹一下SpringBoot讀寫(xiě)分離,感興趣的可以了解一下
    2025-11-11
  • SpringBoot 過(guò)濾器與攔截器實(shí)例演示

    SpringBoot 過(guò)濾器與攔截器實(shí)例演示

    本文通過(guò)示例代碼給大家講解SpringBoot 過(guò)濾器與攔截器的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • java編寫(xiě)的文件管理器代碼分享

    java編寫(xiě)的文件管理器代碼分享

    本文給大家分享的是一則使用java編寫(xiě)的文件管理器的代碼,新人練手的作品,邏輯上還是有點(diǎn)小問(wèn)題,大家?guī)兔纯窗伞?/div> 2015-04-04
  • 解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問(wèn)題

    解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問(wèn)題

    這篇文章主要介紹了解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springboot2學(xué)習(xí)世界著名程序springboot開(kāi)發(fā)體驗(yàn)

    springboot2學(xué)習(xí)世界著名程序springboot開(kāi)發(fā)體驗(yàn)

    這篇文章主要為大家介紹了世界著名程序springboot開(kāi)發(fā)體驗(yàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Dubbo配置http協(xié)議全過(guò)程

    Dubbo配置http協(xié)議全過(guò)程

    文章介紹了在服務(wù)提供者和服務(wù)消費(fèi)者中,分別通過(guò)添加依賴(lài)包和配置文件,實(shí)現(xiàn)基于HTTP協(xié)議的服務(wù)接口注冊(cè)及調(diào)用,無(wú)需修改消費(fèi)者啟動(dòng)類(lèi),服務(wù)調(diào)用方式與Dubbo協(xié)議類(lèi)似
    2025-10-10
  • SpringBoot中Bean注入沖突的四種解決方案

    SpringBoot中Bean注入沖突的四種解決方案

    在Spring?Boot應(yīng)用開(kāi)發(fā)中,依賴(lài)注入是最常用的功能之一,它極大地簡(jiǎn)化了對(duì)象之間的依賴(lài)關(guān)系管理,然而,當(dāng)Spring容器中存在多個(gè)類(lèi)型相同的Bean時(shí),就會(huì)產(chǎn)生注入沖突問(wèn)題,本文將介紹Spring?Boot中的四種Bean注入沖突解決方案,需要的朋友可以參考下
    2025-06-06
  • Spring Boot 整合 Druid 并開(kāi)啟監(jiān)控的操作方法

    Spring Boot 整合 Druid 并開(kāi)啟監(jiān)控的操作方法

    本文介紹了如何在SpringBoot項(xiàng)目中引入和配置Druid數(shù)據(jù)庫(kù)連接池,并開(kāi)啟其監(jiān)控功能,通過(guò)添加依賴(lài)、配置數(shù)據(jù)源、開(kāi)啟監(jiān)控、自定義配置以及訪問(wèn)監(jiān)控頁(yè)面,開(kāi)發(fā)者可以有效提高數(shù)據(jù)庫(kù)訪問(wèn)效率并監(jiān)控連接池狀態(tài),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Java?如何獲取某年的第一天和最后一天

    Java?如何獲取某年的第一天和最后一天

    在統(tǒng)計(jì)的數(shù)據(jù)是時(shí)候,要統(tǒng)計(jì)某年的數(shù)據(jù),開(kāi)始時(shí)間是某年的第一天,結(jié)束時(shí)間是某年的最后一天,該如何獲取某年的第一天和最后一天,今天通過(guò)本文介紹下Java獲取某年的第一天和最后一天,需要的朋友可以參考下
    2023-07-07
  • spring-boot-starter-thymeleaf加載外部html文件方式

    spring-boot-starter-thymeleaf加載外部html文件方式

    本文介紹了在SpringMVC中使用Thymeleaf模板引擎加載外部HTML文件的方法,以及在Spring Boot中使用Thymeleaf的基本步驟,包括引入依賴(lài)、創(chuàng)建Controller、創(chuàng)建HTML文件、參數(shù)化訪問(wèn)、熱加載和熱更新文件
    2025-02-02

最新評(píng)論

平原县| 宜兴市| 淮南市| 电白县| 余姚市| 永宁县| 墨脱县| 丰镇市| 祁门县| 临安市| 台安县| 葫芦岛市| 齐齐哈尔市| 赤水市| 南郑县| 和顺县| 长丰县| 社会| 永济市| 湘西| 稻城县| 德化县| 锦屏县| 扎兰屯市| 阿勒泰市| 军事| 磐安县| 通渭县| 运城市| 龙海市| 石嘴山市| 巴塘县| 宁夏| 离岛区| 堆龙德庆县| 沁阳市| 五莲县| 金阳县| 巧家县| 诸城市| 绿春县|