1.配置組件
@Configuration和@Bean
@Configuration和@Bean注解配套使用锁孟,首先這個類是一個IOC容器,方法加了一個這個@Bean注解帖蔓,一般這樣的方法返回的都是一個對象丘侠,我們就可以直接從這個類中拿到這個實例,并且是單例的炼杖,我們可以通過AnnotationApplicationContext context = new AnnotationApplicationContext(加了@Configuration注解的類)去獲取到這個bean對象
標注在類上灭返,該類會被CGLIB動態(tài)代理生成子類,可以達到這樣的效果:在某@Bean方法下調(diào)用另一個標注了@Bean的方法坤邪,得到的會是同一個Bean對象熙含;
@ConponentScan
該注解默認會掃描該類所在的報下所有的配置類
@Scope
@Scope("prototype")//多實例,IOC容器啟動創(chuàng)建的時候艇纺,并不會創(chuàng)建對象放在容器在容器當中怎静,當你需要的時候,需要從容器當中取該對象的時候黔衡,就會創(chuàng)建蚓聘。
@Scope("singleton")//單實例 IOC容器啟動的時候就會調(diào)用方法創(chuàng)建對象,以后每次獲取都是從容器當中拿同一個對象(map當中)盟劫。
@Scope("request")//同一個請求創(chuàng)建一個實例
@Scope("session")//同一個session創(chuàng)建一個實例
@Lazy
延遲初始化
@Conditional(WinCondition.class)
條件主鍵夜牡,里面的類實現(xiàn)Condition,然后實現(xiàn)matches方法侣签,返回的boolean值氯材,如果為true,則執(zhí)行該方法
@Import
導入外部資源
帶有@Configuration的配置類
public class TestA {
public void fun(String str) {
System.out.println(str);
}
public void printName() {
System.out.println("類名 :" +Thread.currentThread().getStackTrace()[1].getClassName());
}
}
@Import({TestA.class})
@Configuration
public class ImportConfig {
}
ImportConfig,在類上面加上@Configuration,加上@Configuration是為了能讓Spring 掃描到這個類硝岗,并且直接通過@Import引入TestA類
ImportSelector 的實現(xiàn)
public class TestC {
public void fun(String str) {
System.out.println(str);
}
public void printName() {
System.out.println("類名 :" + Thread.currentThread().getStackTrace()[1].getClassName());
}
}
public class SelfImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.test.importdemo.TestC"};
}
}
SelfImportSelector.class 實現(xiàn)ImportSelector 接口,注入TestC.class
@Import({TestA.class,TestB.class,SelfImportSelector.class})
@Configuration
public class ImportConfig {
}
ImportConfig上面引入SelfImportSelector.class
ImportBeanDefinitionRegistrar 的實現(xiàn)
public class TestD {
public void fun(String str) {
System.out.println(str);
}
public void printName() {
System.out.println("類名 :" + Thread.currentThread().getStackTrace()[1].getClassName());
}
}
public class SelfImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition root = new RootBeanDefinition(TestD.class);
registry.registerBeanDefinition("testD", root);
}
SelfImportBeanDefinitionRegistrar.class,實現(xiàn)接口ImportBeanDefinitionRegistrar,注入TestD.class
@Import({TestA.class,TestB.class,SelfImportSelector.class,
SelfImportBeanDefinitionRegistrar.class})
@Configuration
public class ImportConfig {
}
ImportConfig類上加上導入SelfImportBeanDefinitionRegistrar.class
2.生命周期控制
@PostConstruct用于指定初始化方法
@PostConstruct該注解被用來修飾一個非靜態(tài)的void()方法。被@PostConstruct修飾的方法會在服務(wù)器加載Servlet的時候運行袋毙,并且只會被服務(wù)器執(zhí)行一次型檀。PostConstruct在構(gòu)造函數(shù)之后執(zhí)行,init()方法之前執(zhí)行听盖。
通常我們會是在Spring框架中使用到@PostConstruct注解 該注解的方法在整個Bean初始化中的執(zhí)行順序:
Constructor(構(gòu)造方法) -> @Autowired(依賴注入) -> @PostConstruct(注釋的方法)
@PreDestory
用于指定銷毀方法
@DependsOn
定義bean初始化及銷毀時的順序胀溺,可能有些場景中,bean A 間接依賴 bean B皆看。如Bean B應(yīng)該需要更新一些全局緩存仓坞,bean A需要使用該緩存;因此腰吟,如果bean B沒有準備好无埃,bean A無法訪問。
@Configuration
@ComponentScan("com.logicbig.example")
public class AppConfig {
@Bean(initMethod = "initialize")
@DependsOn("eventListener")
public EventPublisherBean eventPublisherBean () {
return new EventPublisherBean();
}
@Bean(name = "eventListener", initMethod = "initialize")
// @Lazy
public EventListenerBean eventListenerBean () {
return new EventListenerBean();
}
public static void main (String... strings) {
new AnnotationConfigApplicationContext(AppConfig.class);
}
}
EventListenerBean initializing
EventPublisherBean initializing
event received in EventListenerBean : event published from EventPublisherBean
@ApplicationContextAware
可以通過這個上下文環(huán)境對象得到Spring容器中的Bean
@BeanDefinitionRegistryPostProcessor
BeanDefinitionRegistryPostProcessor實現(xiàn)了BeanFactoryPostProcessor接口毛雇,是spring框架的BeanDefinitionRegistry的后處理器嫉称,用來注冊額外的BeanDefinition
3.切面組件
@Transactional
配置聲明式事務(wù)信息
@EnableTransactionManagement
添加對事務(wù)管理的支持