欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springbean的八種加載方式匯總

 更新時間:2022年10月12日 10:31:26   作者:桃花雪  
這篇文章主要介紹了springbean的八種加載方式,一種是XML方式聲明bean,使用@Component及其衍生注解@Controller?、@Service、@Repository定義bean,還有其他方法,本文給大家介紹的非常詳細,需要的朋友可以參考下

總結(jié)了一下八種bean的加載方式

1.XML方式聲明bean

不贅述了

2.使用@Component及其衍生注解@Controller 、@Service、@Repository定義bean

@Service
public class BookServiceImpl implements BookService { }

3.ApplicationContex的register方法

public class AppImport {
    
public static void main(String[] args) {
    
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(SpringConfig5.class);

ctx.register(Cat.class);

String[] names = ctx.getBeanDefinitionNames();

for (String name : names) {
System.out.println(name);
}
}
}

4.第三方bean加載方式

@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
@Bean
public DruidDataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
return ds; 
}
 }

初始化實現(xiàn)FactoryBean接口的類,實現(xiàn)對bean加載到容器之前的批處理操作

@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {

@Bean
public DruidDataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
return ds; } 
}

public class SpringConfig8 {

@Bean
public BookFactoryBean book(){
return new BookFactoryBean();
}

}

5.使用@Import注解

解決無侵入式加載,降低耦合問題

@Import(Dog.class)
public class SpringConfig5 { } 被導入的bean無需使用注解聲明為bean
public class Dog { }

此形式可以有效的降低源代碼與Spring技術的耦合度,在spring技術底層及諸多框架的整合中大量使用

6.ImportSelector接口

在import的基礎上解決業(yè)務判斷問題

導入實現(xiàn)了ImportSelector接口的類,實現(xiàn)對導入源的編程式處理解決根據(jù)邏輯業(yè)務加載bean的問題

public class MyImportSelector implements ImportSelector {
public String[] selectImports(AnnotationMetadata metadata) {

boolean flag = metadata.hasAnnotation("org.springframework.context.annotation.Import");//判斷SpringConfig5的元數(shù)據(jù)有哪些特征。有沒有import注解


if(flag){
return new String[]{"com.itheima.domain.Dog"};
}
return new String[]{"com.itheima.domain.Cat"};
}

}
@Import(MyImportSelector.class)
public class SpringConfig5 { } 

7.ImportBeanDefinitionRegistrar接口

//在importselect基礎上達到覆蓋已有相同名稱bean的目的

導入實現(xiàn)了ImportBeanDefinitionRegistrar接口的類,通過BeanDefinition的注冊器注冊實名bean,實現(xiàn)對
容器中bean的裁定,例如對現(xiàn)有bean的覆蓋,進而達成不修改源代碼的情況下更換實現(xiàn)的效果。

public class MyRegistrar implements ImportBeanDefinitionRegistrar {
@Override    
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry) {

//AnnotationMetadata 同importselect方式判斷元數(shù)據(jù)

BeanDefinition beanDefinition = BeanDefinitionBuilder
.rootBeanDefinition(BookServiceImpl2.class) .getBeanDefinition();
registry.registerBeanDefinition("bookService", beanDefinition);
}
//

}
@Import(MyRegistrar.class)
public class SpringConfig6 { } 

8.BeanDefinitionRegistryPostProcessor接口

//在第七種的基礎上解決相同名稱bean過多,相互覆蓋。誰優(yōu)先級高的問題

導入實現(xiàn)了BeanDefinitionRegistryPostProcessor接口的類,通過BeanDefinition的注冊器注冊實名bean,
實現(xiàn)對容器中bean的最終裁定

public class MyPostProcessor implements BeanDefinitionRegistryPostProcessor {

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
BeanDefinition beanDefinition = BeanDefinitionBuilder
.rootBeanDefinition(BookServiceImpl4.class) .getBeanDefinition();
registry.registerBeanDefinition("bookService", beanDefinition);
}

}
@Import({BookServiceImpl1.class, MyPostProcessor.class, MyRegistrar2.class, MyRegistrar.class})
public class SpringConfig8 {
}

如果BookServiceImpl1.class, MyPostProcessor.class, MyRegistrar.class, MyRegistrar.class中bean的名稱相同MyPostProcessor.class的優(yōu)先級最高

到此這篇關于springbean的八種加載方式的文章就介紹到這了,更多相關springbean加載方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論