国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringBoot里的@Import使用

roland_reed / 1411人閱讀

摘要:比較典型的是注解代碼是通過類,根據(jù)注解所指定的來選擇使用哪個配置類的。

前言

在日常利用SpringBoot開發(fā)的過程中,我們開發(fā)的Bean大部分都是依賴于spring容器進行管理,這樣很方便日常Bean的注入。
大家都知道對象的創(chuàng)建必須通過構(gòu)造方法創(chuàng)建,構(gòu)造方法分為兩種,一種時無參(此方法只是創(chuàng)建了個空對象,后續(xù)使用屬性時還需要set/get),另外一種時重載的有參構(gòu)造器(此方法創(chuàng)建后的對象,對于已經(jīng)賦值的屬性當然可以立馬使用),所以Spring在創(chuàng)建Bean的時候也無非就這兩種(默認時無參構(gòu)造創(chuàng)建),基于spring體系的瘡癰創(chuàng)建Bean注解有:比如@Configuration里的@Bean,比如@Component,如果是spring mvc的話,還有一些專用的@Controller,@Service,@Repository。

引入

那么,使用spring boot時,如果想自己實現(xiàn)一些初始設置比較復雜的bean時,可以在類上用@Configuration注解,然后類內(nèi)部在返回具體bean的方法上使用@Bean注解。
那么,要讓容器找到這個配置類,并讓容器進行管理的話,方法有這么幾種:

方法一:@ComponentScan注解

將配置類放到@ComponentScan注解所指定的package里。
以下是截取springboot Guide中的一段話:

方法二:使用@Import注解
首先,@Import是spring中的內(nèi)置注解,所以spring會對此注解進行管理。
這個注解的主要用途截取spring的源碼說明,然后逐一講解:

a.允許使用@Configuration注解的類

這個比較簡單,如果明確知道需要引入哪個配置類,直接引入就可以。

b.允許是實現(xiàn)ImportSelector接口的類

如果并不確定引入哪個配置類,需要根據(jù)@Import注解所標識的類或者另一個注解(通常是注解)里的定義信息選擇配置類的話,用這種方式。
比較典型的是注解@EnableTransactionManagement

java代碼:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({TransactionManagementConfigurationSelector.class})
public @interface EnableTransactionManagement {
    boolean proxyTargetClass() default false;
    AdviceMode mode() default AdviceMode.PROXY;
    int order() default 2147483647;
}
 

是通過TransactionManagementConfigurationSelector類,根據(jù)注解@EnableTransactionManagement所指定的AdviceMode來選擇使用哪個配置類的。

 java代碼:   
public class TransactionManagementConfigurationSelector extends AdviceModeImportSelector {

    @Override
    protected String[] selectImports(AdviceMode adviceMode) {
        switch (adviceMode) {
            case PROXY:
                return new String[] {AutoProxyRegistrar.class.getName(), ProxyTransactionManagementConfiguration.class.getName()};
            case ASPECTJ:
                return new String[] {TransactionManagementConfigUtils.TRANSACTION_ASPECT_CONFIGURATION_CLASS_NAME};
            default:
                return null;
        }
    }
}
c.允許是實現(xiàn)了ImportBeanDefinitionRegistrar接口的類

一般只要用戶確切的知道哪些bean需要放入容器的話,自己便可以通過spring boot里所提供的注解來標識了,比如@Configuration里的@Bean,比如@Component,如果是spring mvc的話,還有一些專用的@Controller,@Service,@Repository。
但是,如果是第三方包,而且又不是確定的類,并且這些類并不是spring專用,所以不想用spring的注解進行侵入式標識,那么如果找到這些類放到spring的容器呢?
這時候就用到了用注解@Import引入ImportBeanDefinitionRegistrar子類的方式,最典型的應用就是mybatis,使用工具自動生成了一批mapper和entity,而如何把這些普通的類放入容器,就是通過注解

典型代表@MapperScan

java代碼:

@Retention(RetentionPolicy.RUNTIME)  

@Target(ElementType.TYPE)
@Documented
@Import(MapperScannerRegistrar.class)
public @interface MapperScan {
String[] value() default {};
String[] basePackages() default {};
Class[] basePackageClasses() default {};
Class nameGenerator() default BeanNameGenerator.class;
Class annotationClass() default Annotation.class;
Class markerInterface() default Class.class;
String sqlSessionTemplateRef() default "";
String sqlSessionFactoryRef() default "";
Class factoryBean() default MapperFactoryBean.class;
}

這個注解用@Import引入了MapperScannerRegistrar類,這個類里會取得注解@MapperScan作設置的package,然后掃描這個package下所有的類,并放入容器中。

d.正如源碼中的備注一樣,"as well as regular component",說明,Import可以像類似于@Component此功能的注解一樣,在容器啟動的時候?qū)⒋祟惗x為一個bean,并將此bean交于容器管理,但此用法較少。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69073.html

相關文章

  • springboot+ELK日志監(jiān)控系統(tǒng)

    摘要:簡介是簡稱是一個分布式的搜索和分析引擎,可以用于全文檢索結(jié)構(gòu)化檢索和分析,并能將這三者結(jié)合起來。基于開發(fā),現(xiàn)在是使用最廣的開源搜索引擎之一。是一個開源的分析與可視化平臺,設計出來用于和一起使用的。 ELK簡介ELK是Elasticsearch+Logstash+Kibana簡稱 Elasticsearch 是一個分布式的搜索和分析引擎,可以用于全文檢索、結(jié)構(gòu)化檢索和分析,并能將這三者結(jié)...

    gclove 評論0 收藏0
  • 最渣的 Spring Boot 文章

    摘要:如刪除臨時文件,清除緩存信息,讀取配置文件信息,數(shù)據(jù)庫連接等。提供的接口也可以滿足該業(yè)務場景。不同點中方法的參數(shù)為,而接口中方法的參數(shù)為數(shù)組。 spring-boot-starter-parent Maven的用戶可以通過繼承spring-boot-starter-parent項目來獲得一些合理的默認配置。這個parent提供了以下特性: 默認使用Java 8 使用UTF-8編碼 一...

    yanest 評論0 收藏0
  • SpringBoot究竟是如何跑起來的?

    摘要:你可以試著沿著調(diào)用棧代碼一層一層的深入進去,如果你不打斷點,你根本不知道接下來程序會往哪里流動。接下來再看看運行時堆棧,看看一個請求的調(diào)用棧有多深。就是如此被自動裝配進的。 摘要: 神奇的SpringBoot。 原文:SpringBoot 究竟是如何跑起來的? 作者:老錢 Fundebug經(jīng)授權轉(zhuǎn)載,版權歸原作者所有。 不得不說 SpringBoot 太復雜了,我本來只想研究一下...

    DevWiki 評論0 收藏0
  • 一起來學SpringBoot | 第十三篇:RabbitMQ延遲隊列

    摘要:另一種就是用中的位于包下,本質(zhì)是由和實現(xiàn)的阻塞優(yōu)先級隊列。表明了一條消息可在隊列中存活的最大時間。當某條消息被設置了或者當某條消息進入了設置了的隊列時,這條消息會在時間后死亡成為。 SpringBoot 是為了簡化 Spring 應用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關注業(yè)務本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關的依賴就可...

    selfimpr 評論0 收藏0
  • Redis詳解 - SpringBoot整合Redis,RedisTemplate和注解兩種方式的使

    摘要:和注解的方法返回值要一致刪除緩存在需要刪除緩存的方法上加注解,執(zhí)行完這個方法之后會將中對應的記錄刪除。代表返回值,意思是當返回碼不等于時不緩存,也就是等于時才緩存。返回值特定值如果被設置了如果沒有被設置例子自動將對應到并且返回原來對應的。 本文主要講 Redis 的使用,如何與 SpringBoot 項目整合,如何使用注解方式和 RedisTemplate 方式實現(xiàn)緩存。最后會給一個用...

    SexySix 評論0 收藏0

發(fā)表評論

0條評論

roland_reed

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<