中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

wap手機(jī)網(wǎng)站建設(shè)制作開發(fā)深圳競價排名網(wǎng)絡(luò)推廣

wap手機(jī)網(wǎng)站建設(shè)制作開發(fā),深圳競價排名網(wǎng)絡(luò)推廣,西寧專業(yè)做網(wǎng)站公司,手機(jī)怎么制作圖文廣告https://blog.csdn.net/ManuMAX/article/details/129017443 導(dǎo)讀 Spring Boot方式的項(xiàng)目開發(fā)已經(jīng)逐步成為Java應(yīng)用開發(fā)領(lǐng)域的主流框架,它不僅可以方便地創(chuàng)建生產(chǎn)級的Spring應(yīng)用程序,還能輕松地通過一些注解配置與目前比較火熱的微服務(wù)框架SpringCloud集成…

https://blog.csdn.net/ManuMAX/article/details/129017443

導(dǎo)讀

Spring Boot方式的項(xiàng)目開發(fā)已經(jīng)逐步成為Java應(yīng)用開發(fā)領(lǐng)域的主流框架,它不僅可以方便地創(chuàng)建生產(chǎn)級的Spring應(yīng)用程序,還能輕松地通過一些注解配置與目前比較火熱的微服務(wù)框架SpringCloud集成。

而Spring Boot之所以能夠輕松地實(shí)現(xiàn)應(yīng)用的創(chuàng)建及與其他框架快速集成,最核心的原因就在于它極大地簡化了項(xiàng)目的配置,最大化地實(shí)現(xiàn)了“約定大于配置”的原則。然而基于Spring Boot雖然極大地方便了開發(fā),但是也很容易讓人“云里霧里”,特別是各種注解很容易讓人“知其然而不知其所以然。

所以,要想用好Spring Boot就必須對其提供的各類功能注解有一個全面而清晰地認(rèn)識和理解。一方面可以提高基于Spring Boot的開發(fā)效率,另一方面也是面試中被問及框架原理時所必需要掌握的知識點(diǎn)。在接下來的內(nèi)容中,小編就帶大家一起來探究下Spring Boot的一些常用注解吧!

Spring相關(guān)6個注解

Spring Boot的有些注解也需要與Spring的注解搭配使用,這里小編梳理了在項(xiàng)目中與Spring Boot注解配合最為緊密的6個Spring基礎(chǔ)框架的注解。如

1、@Configuration

從Spring3.0,@Configuration用于定義配置類,可替換xml配置文件,被注解的類內(nèi)部包含有一個或多個被@Bean注解的方法,這些方法將會被
AnnotationConfigApplicationContext
AnnotationConfigWebApplicationContext類進(jìn)行掃描,并用于構(gòu)建bean定義,初始化Spring容器。

@Configuration
public class TaskAutoConfiguration {@Bean@Profile("biz-electrfence-controller")public BizElectrfenceControllerJob bizElectrfenceControllerJob() {return new BizElectrfenceControllerJob();}@Bean@Profile("biz-consume-1-datasync")public BizBikeElectrFenceTradeSyncJob bizBikeElectrFenceTradeSyncJob() {return new BizBikeElectrFenceTradeSyncJob();}
}

2、@ComponentScan

做過web開發(fā)的同學(xué)一定都有用過@Controller,@Service,@Repository注解,查看其源碼你會發(fā)現(xiàn),他們中有一個共同的注解@Component,沒錯@ComponentScan注解默認(rèn)就會裝配標(biāo)識了@Controller,@Service,@Repository,@Component注解的類到spring容器中。

@ComponentScan(value = "com.abacus.check.api")
public class CheckApiApplication {public static void main(String[] args) {SpringApplication.run(CheckApiApplication.class, args);}
}

@SpringBootApplication注解也包含了@ComponentScan注解,所以在使用中我們也可以通過@SpringBootApplication注解的scanBasePackages屬性進(jìn)行配置。

@SpringBootApplication(scanBasePackages = {"com.abacus.check.api", "com.abacus.check.service"})
public class CheckApiApplication {public static void main(String[] args) {SpringApplication.run(CheckApiApplication.class, args);}
}

3、@Conditional

@Conditional是Spring4新提供的注解,通過@Conditional注解可以根據(jù)代碼中設(shè)置的條件裝載不同的bean,在設(shè)置條件注解之前,先要把裝載的bean類去實(shí)現(xiàn)Condition接口,然后對該實(shí)現(xiàn)接口的類設(shè)置是否裝載的條件。Spring Boot注解中的@ConditionalOnProperty、@ConditionalOnBean等以@Conditional*開頭的注解,都是通過集成了@Conditional來實(shí)現(xiàn)相應(yīng)功能的。

4、@Import

通過導(dǎo)入的方式實(shí)現(xiàn)把實(shí)例加入springIOC容器中??梢栽谛枰獣r將沒有被Spring容器管理的類導(dǎo)入至Spring容器中。

//類定義
public class Square {}
public class Circular {}
//導(dǎo)入
@Import({Square.class,Circular.class})
@Configuration
public class MainConfig{}

5、@ImportResource

和@Import類似,區(qū)別就是@ImportResource導(dǎo)入的是配置文件。

@ImportResource("classpath:spring-redis.xml") //導(dǎo)入xml配置
public class CheckApiApplication {public static void main(String[] args) {SpringApplication.run(CheckApiApplication.class, args);}
}

6、@Component

@Component是一個元注解,意思是可以注解其他類注解,如@Controller @Service @Repository。帶此注解的類被看作組件,當(dāng)使用基于注解的配置和類路徑掃描的時候,這些類就會被實(shí)例化。其他類級別的注解也可以被認(rèn)定為是一種特殊類型的組件,比如@Controller?控制器(注入服務(wù))、@Service服務(wù)(注入dao)、@Repository?dao(實(shí)現(xiàn)dao訪問)。@Component泛指組件,當(dāng)組件不好歸類的時候,我們可以使用這個注解進(jìn)行標(biāo)注,作用就相當(dāng)于 XML配置,<bean id="" class=""/>。

Spring Boot最核心的20個注解

說完與Spring Boot密切相關(guān)的幾個Spring基礎(chǔ)注解后,下面我們就再一起看看Spring Boot提供的核心注解的內(nèi)容吧!

1、@SpringBootApplication

這個注解是Spring Boot最核心的注解,用在 Spring Boot的主類上,標(biāo)識這是一個 Spring Boot 應(yīng)用,用來開啟 Spring Boot 的各項(xiàng)能力。實(shí)際上這個注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三個注解的組合。由于這些注解一般都是一起使用,所以Spring Boot提供了一個統(tǒng)一的注解@SpringBootApplication。

@SpringBootApplication(exclude = {MongoAutoConfiguration.class,MongoDataAutoConfiguration.class,DataSourceAutoConfiguration.class,ValidationAutoConfiguration.class,MybatisAutoConfiguration.class,MailSenderAutoConfiguration.class,
})
public class API {public static void main(String[] args) {SpringApplication.run(API.class, args);}
}

2、@EnableAutoConfiguration

允許 Spring Boot 自動配置注解,開啟這個注解之后,Spring Boot 就能根據(jù)當(dāng)前類路徑下的包或者類來配置 Spring Bean。

如:當(dāng)前類路徑下有 Mybatis 這個 JAR 包,MybatisAutoConfiguration 注解就能根據(jù)相關(guān)參數(shù)來配置 Mybatis 的各個 Spring Bean。

@EnableAutoConfiguration實(shí)現(xiàn)的關(guān)鍵在于引入了
AutoConfigurationImportSelector,其核心邏輯為selectImports方法,邏輯大致如下:

  • 從配置文件META-INF/spring.factories加載所有可能用到的自動配置類;
  • 去重,并將exclude和excludeName屬性攜帶的類排除;
  • 過濾,將滿足條件(@Conditional)的自動配置類返回;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
//導(dǎo)入AutoConfigurationImportSelector的子類
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};String[] excludeName() default {};
}

3、@SpringBootConfiguration

這個注解就是 @Configuration 注解的變體,只是用來修飾是 Spring Boot 配置而已,或者可利于 Spring Boot 后續(xù)的擴(kuò)展。

4、@ConditionalOnBean

@ConditionalOnBean(A.class)僅僅在當(dāng)前上下文中存在A對象時,才會實(shí)例化一個Bean,也就是說只有當(dāng)A.class 在spring的applicationContext中存在時,這個當(dāng)前的bean才能夠創(chuàng)建。

@Bean
//當(dāng)前環(huán)境上下文存在DefaultMQProducer實(shí)例時,才能創(chuàng)建RocketMQProducerLifecycle這個Bean
@ConditionalOnBean(DefaultMQProducer.class)
public RocketMQProducerLifecycle rocketMQLifecycle() {return new RocketMQProducerLifecycle();
}

5、@ConditionalOnMissingBean

組合@Conditional注解,和@ConditionalOnBean注解相反,僅僅在當(dāng)前上下文中不存在A對象時,才會實(shí)例化一個Bean。

 @Bean//僅當(dāng)當(dāng)前環(huán)境上下文缺失RocketMQProducer對象時,才允許創(chuàng)建RocketMQProducer Bean對象@ConditionalOnMissingBean(RocketMQProducer.class)public RocketMQProducer mqProducer() {return new RocketMQProducer();}

6、@ConditionalOnClass

組合 @Conditional 注解,可以僅當(dāng)某些類存在于classpath上時候才創(chuàng)建某個Bean。

 @Bean//當(dāng)classpath中存在類HealthIndicator時,才創(chuàng)建HealthIndicator Bean對象@ConditionalOnClass(HealthIndicator.class)public HealthIndicator rocketMQProducerHealthIndicator(Map<String, DefaultMQProducer> producers) {if (producers.size() == 1) {return new RocketMQProducerHealthIndicator(producers.values().iterator().next());}}

7、@ConditionalOnMissingClass

組合@Conditional注解,和@ConditionalOnMissingClass注解相反,當(dāng)classpath中沒有指定的 Class才開啟配置。

8、@
ConditionalOnWebApplication

組合@Conditional 注解,當(dāng)前項(xiàng)目類型是 WEB 項(xiàng)目才開啟配置。當(dāng)前項(xiàng)目有以下 3 種類型:ANY(任何Web項(xiàng)目都匹配)、SERVLET(僅但基礎(chǔ)的Servelet項(xiàng)目才會匹配)、REACTIVE(只有基于響應(yīng)的web應(yīng)用程序才匹配)。

9、@
ConditionalOnNotWebApplication

組合@Conditional注解,和@
ConditionalOnWebApplication 注解相反,當(dāng)前項(xiàng)目類型不是 WEB 項(xiàng)目才開啟配置。

10、@ConditionalOnProperty

組合 @Conditional 注解,當(dāng)指定的屬性有指定的值時才開啟配置。具體操作是通過其兩個屬性name以及havingValue來實(shí)現(xiàn)的,其中name用來從application.properties中讀取某個屬性值,如果該值為空,則返回false;如果值不為空,則將該值與havingValue指定的值進(jìn)行比較,如果一樣則返回true;否則返回false。如果返回值為false,則該configuration不生效;為true則生效。

 @Bean//匹配屬性rocketmq.producer.enabled值是否為true@ConditionalOnProperty(value = "rocketmq.producer.enabled", havingValue = "true", matchIfMissing = true)public RocketMQProducer mqProducer() {return new RocketMQProducer();}

11、@ConditionalOnExpression

組合 @Conditional 注解,當(dāng) SpEL 表達(dá)式為 true 時才開啟配置。

@Configuration
@ConditionalOnExpression("${enabled:false}")
public class BigpipeConfiguration {@Beanpublic OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) {return new OrderMessageMonitor(configContext);}
}

12、@ConditionalOnJava

組合@Conditional 注解,當(dāng)運(yùn)行的 Java JVM 在指定的版本范圍時才開啟配置。

13、@ConditionalOnResource

組合 @Conditional 注解,當(dāng)類路徑下有指定的資源才開啟配置。

@Bean
@ConditionalOnResource(resources="classpath:shiro.ini")
protected Realm iniClasspathRealm(){return new Realm();
}

14、@ConditionalOnJndi

組合 @Conditional 注解,當(dāng)指定的 JNDI 存在時才開啟配置。

15、@
ConditionalOnCloudPlatform

組合 @Conditional 注解,當(dāng)指定的云平臺激活時才開啟配置。

16、@
ConditionalOnSingleCandidate

組合 @Conditional 注解,當(dāng)指定的 class 在容器中只有一個 Bean,或者同時有多個但為首選時才開啟配置。

17、@ConfigurationProperties

Spring Boot可使用注解的方式將自定義的properties文件映射到實(shí)體bean中,比如config.properties文件。

@Data
@ConfigurationProperties("rocketmq.consumer")
public class RocketMQConsumerProperties extends RocketMQProperties {private boolean enabled = true;private String consumerGroup;private MessageModel messageModel = MessageModel.CLUSTERING;private ConsumeFromWhere consumeFromWhere = ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET;private int consumeThreadMin = 20;private int consumeThreadMax = 64;private int consumeConcurrentlyMaxSpan = 2000;private int pullThresholdForQueue = 1000;private int pullInterval = 0;private int consumeMessageBatchMaxSize = 1;private int pullBatchSize = 32;
}

18、@
EnableConfigurationProperties

當(dāng)@
EnableConfigurationProperties注解應(yīng)用到你的@Configuration時,任何被@ConfigurationProperties注解的beans將自動被Environment屬性配置。 這種風(fēng)格的配置特別適合與SpringApplication的外部YAML配置進(jìn)行配合使用。

@Configuration
@EnableConfigurationProperties({RocketMQProducerProperties.class,RocketMQConsumerProperties.class,
})
@AutoConfigureOrder
public class RocketMQAutoConfiguration {@Value("${spring.application.name}")private String applicationName;
}

19、@AutoConfigureAfter

用在自動配置類上面,表示該自動配置類需要在另外指定的自動配置類配置完之后。

如 Mybatis 的自動配置類,需要在數(shù)據(jù)源自動配置類之后。

@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration {
}

20、@AutoConfigureBefore

這個和@AutoConfigureAfter注解使用相反,表示該自動配置類需要在另外指定的自動配置類配置之前。

21、@AutoConfigureOrder

Spring Boot 1.3.0中有一個新的注解@AutoConfigureOrder,用于確定配置加載的優(yōu)先級順序。

 @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) // 自動配置里面的最高優(yōu)先級@Configuration@ConditionalOnWebApplication // 僅限于web應(yīng)用@Import(BeanPostProcessorsRegistrar.class) // 導(dǎo)入內(nèi)置容器的設(shè)置public class EmbeddedServletContainerAutoConfiguration {@Configuration@ConditionalOnClass({ Servlet.class, Tomcat.class })@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)public static class EmbeddedTomcat {// ...}@Configuration@ConditionalOnClass({ Servlet.class, Server.class, Loader.class, WebAppContext.class })@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)public static class EmbeddedJetty {// ...}
}

回復(fù)“資源”,領(lǐng)取 練手源碼,視頻教程,微服務(wù)、并發(fā),數(shù)據(jù)可調(diào)優(yōu)等,可以給大家免費(fèi)分享

文章知識點(diǎn)與官方知識檔案匹配,可進(jìn)一步學(xué)習(xí)相關(guān)知識
Java技能樹注解基本語法98542 人正在系統(tǒng)學(xué)習(xí)中
http://www.risenshineclean.com/news/45363.html

相關(guān)文章:

  • 廣州番禺建網(wǎng)站什么是seo關(guān)鍵詞優(yōu)化
  • 資源交易網(wǎng)站代碼百度經(jīng)驗(yàn)手機(jī)版
  • 星裕建設(shè)網(wǎng)站朝陽seo搜索引擎
  • 南昌公司做網(wǎng)站南京百度seo排名優(yōu)化
  • 網(wǎng)站建設(shè)可行分析性報(bào)告真正永久免費(fèi)的建站系統(tǒng)有哪些
  • 千牛cdn wordpress長沙網(wǎng)站優(yōu)化推廣方案
  • 免費(fèi)網(wǎng)站建站一級av無代碼免費(fèi)web開發(fā)平臺
  • wordpress主題樣式seo軟件資源
  • 挖礦網(wǎng)站怎么做seo技術(shù)培訓(xùn)寧波
  • 郴州百度seoseo入門教學(xué)
  • 國內(nèi)網(wǎng)站不備案品牌推廣的方式有哪些
  • 今天八點(diǎn)發(fā)布的株洲疫情網(wǎng)站搜索引擎優(yōu)化主要方法
  • 網(wǎng)站圖片鏈接到視頻怎么做微信營銷推廣
  • 婚慶公司加盟連鎖品牌廣告優(yōu)化
  • 哪個網(wǎng)站專門做母嬰東營網(wǎng)站推廣公司
  • 上海app制作灰色行業(yè)seo
  • 自己建一個網(wǎng)站難嗎網(wǎng)站怎么營銷推廣
  • 五合一小程序網(wǎng)站推廣網(wǎng)站排名
  • 四川網(wǎng)站建設(shè)套餐北京網(wǎng)站seo設(shè)計(jì)
  • ppt做雜志模板下載網(wǎng)站搜索引擎排行榜前十名
  • 免費(fèi)的黃岡網(wǎng)站有哪些代碼系統(tǒng)優(yōu)化的意義
  • 把網(wǎng)站傳到服務(wù)器上怎么做新媒體運(yùn)營
  • 做網(wǎng)站是怎樣賺錢深圳全網(wǎng)營銷哪里好
  • 網(wǎng)站的排名優(yōu)化怎么做怎么做網(wǎng)頁設(shè)計(jì)的頁面
  • js網(wǎng)站模板下載軟文推廣例子
  • 關(guān)于企業(yè)網(wǎng)站建設(shè)的請示高清網(wǎng)站推廣免費(fèi)下載
  • 網(wǎng)站建設(shè) 中企動力公司中山做網(wǎng)站推廣公司
  • 營銷策劃的流程南昌seo網(wǎng)站排名
  • 網(wǎng)站備案是空間備案還是域名備案友情鏈接大全
  • 設(shè)計(jì)網(wǎng)站的元素萬網(wǎng)域名管理入口