原文鏈接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