關(guān)于ApplicationContext的三個(gè)常用實(shí)現(xiàn)類
ApplicationContext的三個(gè)常用實(shí)現(xiàn)類
FileSystemXmlApplicationContext
:可以加載磁盤路徑下的配置文件(不常用)
public class Client { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext("C:\\Users\\ghh\\Desktop\\bean.xml"); AccountService service = context.getBean("accountService", AccountService.class); AccountDao accountDao = context.getBean("accountDao", AccountDao.class); System.out.println(service); System.out.println(accountDao); } }
ClassPathXmlApplicationContext
:可以加載類路徑下的配置文件
要求配置文件必須在類路徑下面
public class Client { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); AccountService service = context.getBean("accountService", AccountService.class); AccountDao accountDao = context.getBean("accountDao", AccountDao.class); System.out.println(service); System.out.println(accountDao); } }
AnnotationConfigApplicationContext
:讀取注解創(chuàng)建容器
applicationContext=null的問題
問題
要對(duì)一個(gè)公共模塊項(xiàng)目,進(jìn)行一個(gè)拆分,做一個(gè)細(xì)化。
調(diào)整的時(shí)候,調(diào)整了啟單類的位置(并未注意到),單元測(cè)試的時(shí)候,就報(bào)錯(cuò)。
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class SpringUtils implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringUtils.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name) { return applicationContext.getBean(name); } public static <T> T getBean(Class<T> requiredType) { return applicationContext.getBean(requiredType); } }
setApplicationContext 調(diào)試的時(shí)候,方法沒進(jìn)去。說明bean沒有初始化。
處理1:檢查目錄
啟動(dòng)類要在頂層的位置,這樣才會(huì)讀整個(gè),就不用設(shè)置@ComponentScan
處理2:設(shè)置@ComponentScan
指定具體讀取的路徑
@ComponentScan(basePackages = {"com.basic.common"}) public class BasicCommonApplication { public static void main(String[] args) { SpringApplication.run(BasicCommonApplication.class, args); } @Bean public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean() { return new DozerBeanMapperFactoryBean(); } }
心得:
如果在單個(gè)項(xiàng)目中,啟動(dòng)類需要在頂層的位置,才不用設(shè)置@ComponentScan,否則需要進(jìn)行設(shè)置,才能讀取得到。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java設(shè)計(jì)模式中單一職責(zé)原則詳解
這篇文章主要介紹了Java設(shè)計(jì)模式中單一職責(zé)原則詳解,單一職責(zé)原則 (SRP) 是軟件設(shè)計(jì)中的一個(gè)重要原則,它要求每個(gè)類只負(fù)責(zé)一個(gè)職責(zé),需要的朋友可以參考下2023-05-05springboot實(shí)現(xiàn)增加黑名單和白名單功能
本文主要介紹了springboot實(shí)現(xiàn)增加黑名單和白名單功能,就是單純的實(shí)現(xiàn)filter,然后注冊(cè)到springboot里面,在filter里面進(jìn)行黑白名單的篩選,感興趣的可以了解一下2024-05-05Java定時(shí)任務(wù)的三種實(shí)現(xiàn)方法
在應(yīng)用里經(jīng)常都有用到在后臺(tái)跑定時(shí)任務(wù)的需求。舉個(gè)例子,比如需要在服務(wù)后臺(tái)跑一個(gè)定時(shí)任務(wù)來進(jìn)行垃圾回收2014-04-04SpringBoot項(xiàng)目如何使用多線程執(zhí)行定時(shí)任務(wù)
在SpringBoot項(xiàng)目中使用多線程執(zhí)行定時(shí)任務(wù),可以避免一個(gè)耗時(shí)任務(wù)影響其他任務(wù),通過配置線程池任務(wù)調(diào)度器,Spring會(huì)自動(dòng)使用多線程執(zhí)行定時(shí)任務(wù)2025-01-01java使用RandomAccessFile類基于指針讀寫文件實(shí)例代碼
這篇文章主要介紹了java使用RandomAccessFile類基于指針讀寫文件實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10