spring注解整理

原文鏈接http://zhhll.icu/2021/%E6%A1%86%E6%9E%B6/spring/spring%E6%B3%A8%E8%A7%A3%E6%95%B4%E7%90%86/

spring注解整理

@Configuration

使用@Configuration注解來標(biāo)注的類為配置類题涨,配置類就相當(dāng)于配置文件偎谁,可以在配置類中來配置bean

@Configuration
public class MainConfig {

    /**
     * bean的類型是返回類型总滩,bean的id默認(rèn)是方法名稱
     * @return
     */
    @Bean
    public Person person(){
        return new Person("張三",18);
    }
}

Bean

使用@Bean來標(biāo)注方法以此來進(jìn)行bean的實例化,bean的類型是返回類型搭盾,bean的id默認(rèn)是方法名稱咳秉,可以使用@Bean注解來自定義bean的id以及初始化方法、銷毀方法

public @interface Bean {
    @AliasFor("name")
    String[] value() default {};

    @AliasFor("value")
    String[] name() default {};

    Autowire autowire() default Autowire.NO;

    String initMethod() default "";

    String destroyMethod() default "(inferred)";
}
bean的作用域@Scope

可以在生成bean的方法上使用@Scope來指定bean的作用域

  • ConfigurableBeanFactory#SCOPE_PROTOTYPE
  • ConfigurableBeanFactory#SCOPE_SINGLETON
  • org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
  • org.springframework.web.context.WebApplicationContext#SCOPE_SESSION
懶加載@Lazy

對于單例bean默認(rèn)是在容器啟動的時候加載鸯隅,可以使用懶加載來使其第一次調(diào)用時在進(jìn)行加載

在生成bean的方法上使用@Lazy來使用來加載

bean的條件注冊@Conditional

@Conditional可以標(biāo)注在類上澜建,也可以標(biāo)注在方法上,

public @interface Conditional {

   //Condition類數(shù)組
   Class<? extends Condition>[] value();

}

可以自定義Condition蝌以,需要實現(xiàn)Condition接口

@Primary

如果存在多個相同類型的bean炕舵,可以使用@Primary注解來標(biāo)注bean,使得該bean為默認(rèn)獲取到的bean

工廠bean

可以使用FactoryBean來使用工廠bean來實例化bean跟畅,此時使用personFactoryBean來獲取到的是Person的實例

@Bean
public PersonFactoryBean personFactoryBean(){
    return new PersonFactoryBean();
}

public class PersonFactoryBean implements FactoryBean<Person> {
    @Override
    public Person getObject() throws Exception {
        return new Person();
    }

    @Override
    public Class<?> getObjectType() {
        return Person.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}

如果想要獲取到FactoryBean本身的實例咽筋,可以使用&personFactoryBean來獲取

@ComponentScan

在配置類上標(biāo)注組件掃描,相當(dāng)于<context:component-scan>可以配置掃描的規(guī)則徊件,使用basePackages來指定掃描的包奸攻,includeFilters和excludeFilters來配置包含或者排除的規(guī)則,與配置文件相似

兩個示例

//排除Controller注解標(biāo)識的bean
@ComponentScan(basePackages = {"com.zhanghe.study.spring4.annotation"},excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
})

// 只包含Controller注解標(biāo)識的bean虱痕,不要忘記useDefaultFilters = false,與使用配置文件相似
@ComponentScan(basePackages = {"com.zhanghe.study.spring4.annotation"},
        useDefaultFilters = false,
        includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})

})

過濾的類型有以下幾種

  • ANNOTATION 按照注解睹耐,最常用
  • ASSIGNABLE_TYPE 按照類型
  • ASPECTJ 使用ASPECTJ表達(dá)式
  • REGEX 使用正則表達(dá)式
  • CUSTOM 使用自定義規(guī)則,實現(xiàn)TypeFilter接口

@Import

使用Import可以進(jìn)行組件導(dǎo)入部翘,對于第三包中的所需要用到的bean硝训,沒有必要每一個都使用@Bean來進(jìn)行一個個的實例化,可以使用@Import來直接導(dǎo)入bean組件

  • @Import(要導(dǎo)入的組件名) bean的id默認(rèn)為全類名

  • @Import(importSelector類) 實現(xiàn)importSelector接口新思,重寫selectImports方法窖梁,返回值就是組件全類名的數(shù)組

    String[] selectImports(AnnotationMetadata importingClassMetadata);
    
  • @Import(ImportBeanDefinitionRegistrar類) 實現(xiàn)ImportBeanDefinitionRegistrar接口,重寫registerBeanDefinitions方法夹囚,自己使用registry進(jìn)行注冊某些bean

    void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);
    

@Value

使用@Value可以為屬性進(jìn)行賦值

基本數(shù)值

@Value("張三")
String name;

Spel表達(dá)式

{}

環(huán)境變量中的值(配置文件中的值)

${}

需要引入配置文件纵刘,使用@PropertySource

@PropertySource(value = "classpath:test.properties")
@Configuration
public class MainConfig4 {

    @Bean
    public TestValue testValue(){
        return new TestValue();
    }
}

public class TestValue {
        // 取出配置文件中的值
    @Value("${test.value}")
    private int value;
}

@EnableAspectJAutoProxy

在之前為了使@Aspect注解生效需要在配置文件中配置

<aop:aspectj-autoproxy/>

而該注解的作用就是使得@Aspect注解生效,開啟基于注解的AOP模式崔兴,與上述配置功能相同

@EnableTransactionManagement

在之前為了使@Transaction注解生效彰导,需要在配置文件中配置

<tx:annotation-driven transaction-manager="transactionManager"/>

而是用該注解的作用就是使得@Transaction注解生效,與上述配置功能相同

由于本身的博客百度沒有收錄敲茄,博客地址http://zhhll.icu

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市山析,隨后出現(xiàn)的幾起案子堰燎,更是在濱河造成了極大的恐慌,老刑警劉巖笋轨,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秆剪,死亡現(xiàn)場離奇詭異赊淑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仅讽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門陶缺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洁灵,你說我怎么就攤上這事饱岸。” “怎么了徽千?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵苫费,是天一觀的道長。 經(jīng)常有香客問我双抽,道長百框,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任牍汹,我火速辦了婚禮铐维,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慎菲。我一直安慰自己嫁蛇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布钧嘶。 她就那樣靜靜地躺著棠众,像睡著了一般。 火紅的嫁衣襯著肌膚如雪有决。 梳的紋絲不亂的頭發(fā)上闸拿,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音书幕,去河邊找鬼乐疆。 笑死悍抑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爬立,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼汪厨!你這毒婦竟也來了坝撑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牵素,失蹤者是張志新(化名)和其女友劉穎严衬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笆呆,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡请琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年粱挡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俄精。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡询筏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竖慧,到底是詐尸還是另有隱情嫌套,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布测蘑,位于F島的核電站灌危,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碳胳。R本人自食惡果不足惜勇蝙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挨约。 院中可真熱鬧味混,春花似錦、人聲如沸诫惭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夕土。三九已至馆衔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怨绣,已是汗流浹背角溃。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留篮撑,地道東北人减细。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像赢笨,于是被迫代替她去往敵國和親未蝌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容