Spring Boot中獲取IOC容器的多種方式
1. 直接注入ApplicationContext
@Service
public class MyService {
@Autowired
private ApplicationContext applicationContext;
public void doSomething() {
// 通過(guò)ApplicationContext獲取Bean
UserService userService = applicationContext.getBean(UserService.class);
// 或者通過(guò)名稱獲取
UserService userService2 = (UserService) applicationContext.getBean("userService");
}
}
2. 實(shí)現(xiàn)ApplicationContextAware接口
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext = context;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return applicationContext.getBean(name, clazz);
}
public static Object getBean(String name) {
return applicationContext.getBean(name);
}
}
3. 通過(guò)SpringApplication.run()獲取ApplicationContext
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// 啟動(dòng)應(yīng)用并獲取ApplicationContext
ApplicationContext context = SpringApplication.run(Application.class, args);
// 直接從context中獲取Bean
UserService userService = context.getBean(UserService.class);
userService.doSomething();
}
}
4. 通過(guò)BeanFactory獲取
@Service
public class MyService {
@Autowired
private BeanFactory beanFactory;
public void doSomething() {
if (beanFactory.containsBean("userService")) {
UserService userService = (UserService) beanFactory.getBean("userService");
// 使用userService
}
}
}
5. 通過(guò)實(shí)現(xiàn)BeanFactoryAware接口
@Component
public class MyComponent implements BeanFactoryAware {
private BeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
public void doSomething() {
UserService userService = (UserService) beanFactory.getBean("userService");
// 使用Bean
}
}
到此這篇關(guān)于Spring Boot中獲取IOC容器的多種方式的文章就介紹到這了,更多相關(guān)SpringBoot 獲取IOC容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Mybatis詳解在注解sql時(shí)報(bào)錯(cuò)的解決方法
MyBatis-Plus 是一個(gè) Mybatis 增強(qiáng)版工具,在 MyBatis 上擴(kuò)充了其他功能沒(méi)有改變其基本功能,為了簡(jiǎn)化開發(fā)提交效率而存在,本篇文章帶你看看在注解sql時(shí)所報(bào)出的錯(cuò)誤解決2022-03-03
一文詳解SpringBoot如何使用pageHelper做分頁(yè)處理
分頁(yè)是常見大型項(xiàng)目都需要的一個(gè)功能,PageHelper是一個(gè)非常流行的MyBatis分頁(yè)插件,下面就跟隨小編一起來(lái)了解下SpringBoot是如何使用pageHelper做分頁(yè)處理的吧2025-03-03
springboot?log4j2.xml如何讀取application.yml中屬性值
這篇文章主要介紹了springboot?log4j2.xml如何讀取application.yml中屬性值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
java實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
使用MyBatis的動(dòng)態(tài)SQL注解實(shí)現(xiàn)實(shí)體的CRUD操作代碼
在使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),動(dòng)態(tài)SQL注解提供了一種優(yōu)雅的方式來(lái)編寫動(dòng)態(tài)SQL語(yǔ)句,MyBatis?3.x?版本提供了下四個(gè)CRUD的高級(jí)注解,這些注解可以幫助開發(fā)者在Mapper接口中動(dòng)態(tài)地構(gòu)建SQL語(yǔ)句,本文給大家介紹了使用MyBatis的動(dòng)態(tài)SQL注解實(shí)現(xiàn)實(shí)體的CRUD操作2024-06-06
Spring中ImportBeanDefinitionRegistrar源碼和使用方式
Spring容器擴(kuò)展流程總結(jié):1. 定義Mapper層,2. 通過(guò)FactoryBean創(chuàng)建代理對(duì)象,3. 使用ImportBeanDefinitionRegistrar修改Bean定義,4. 應(yīng)用自定義注解@LuoyanImportBeanDefinitionRegistrar,5. 配置類中執(zhí)行后置處理器,6. 啟動(dòng)類中查看源碼,希望對(duì)大家有所幫助2024-11-11
修改Android應(yīng)用的樣式的一些關(guān)鍵點(diǎn)解析
這篇文章主要介紹了修改Android應(yīng)用的樣式的一些關(guān)鍵點(diǎn),即對(duì)影響外觀的theme跟style的相關(guān)修改,需要的朋友可以參考下2015-12-12
java微信公眾號(hào)開發(fā)第一步 公眾號(hào)接入和access_token管理
這篇文章主要為大家介紹了java微信公眾號(hào)開發(fā),主要內(nèi)容包括公眾號(hào)接入和access_token管理,感興趣的小伙伴們可以參考一下2016-01-01

