Spring在程式碼中獲取bean的幾種方式
方法一:在初始化時儲存ApplicationContext物件
方法二:通過Spring提供的utils類獲取ApplicationContext物件
方法三:繼承自抽象類ApplicationObjectSupport
方法四:繼承自抽象類WebApplicationObjectSupport
方法五:實現介面ApplicationContextAware
方法六:通過Spring提供的ContextLoader
獲取spring中bean的方式總結:
方法一:在初始化時儲存ApplicationContext物件
- ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
- ac.getBean("userService");//比如:<bean id="userService" class="com.cloud.service.impl.UserServiceImpl"></bean>
說明:這樣的方式適用於採用Spring框架的獨立應用程式,須要程式通過配置檔案手工初始化Spring的情況。
方法二:通過Spring提供的工具類獲取ApplicationContext物件
- ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
- ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
- ac1.getBean("beanId");
- ac2.getBean("beanId");
說明:這樣的方式適合於採用Spring框架的B/S系統,通過ServletContext物件獲取ApplicationContext物件。然後在通過它獲取須要的類例項。上面兩個工具方式的差別是,前者在獲取失敗時丟擲異常。後者返回null。
方法三:繼承自抽象類ApplicationObjectSupport
說明:抽象類ApplicationObjectSupport提供getApplicationContext()方法。能夠方便的獲取ApplicationContext。
Spring初始化時。會通過該抽象類的setApplicationContext(ApplicationContext context)方法將ApplicationContext 物件注入。
方法四:繼承自抽象類WebApplicationObjectSupport
說明:類似上面方法。呼叫getWebApplicationContext()獲取WebApplicationContext
方法五:實現介面ApplicationContextAware
說明:實現該介面的setApplicationContext(ApplicationContext context)方法,並儲存ApplicationContext 物件。Spring初始化時,會通過該方法將ApplicationContext物件注入。
下面是實現ApplicationContextAware介面方式的程式碼,前面兩種方法類似:
- public class SpringContextUtil implements ApplicationContextAware {
- // Spring應用上下文環境
- private static ApplicationContext applicationContext;
- /**
- * 實現ApplicationContextAware介面的回撥方法。設定上下文環境
- *
- * @param applicationContext
- */
- public void setApplicationContext(ApplicationContext applicationContext) {
- SpringContextUtil.applicationContext = applicationContext;
- }
- /**
- * @return ApplicationContext
- */
- public static ApplicationContext getApplicationContext() {
- return applicationContext;
- }
- /**
- * 獲取物件
- *
- * @param name
- * @return Object
- * @throws BeansException
- */
- public static Object getBean(String name) throws BeansException {
- return applicationContext.getBean(name);
- }
- }
儘管,spring提供的後三種方法能夠實如今普通的類中繼承或實現對應的類或介面來獲取spring 的ApplicationContext物件,可是在使用是一定要注意實現了這些類或介面的普通java類一定要在Spring 的配置檔案applicationContext.xml檔案裡進行配置。否則獲取的ApplicationContext物件將為null。
方法六:通過Spring提供的ContextLoader
- WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
- wac.getBean(beanID);
最後提供一種不依賴於servlet,不須要注入的方式。可是須要注意一點,在server啟動時。Spring容器初始化時,不能通過下面方法獲取Spring 容器,細節能夠檢視spring原始碼org.springframework.web.context.ContextLoader。
相關文章
- Spring6 當中 獲取 Bean 的四種方式SpringBean
- Spring - 獲取ApplicationContext的幾種方式SpringAPPContext
- Spring注入Bean的幾種方式SpringBean
- spring註冊bean的幾種方式SpringBean
- Spring中bean的四種注入方式SpringBean
- Spring原始碼剖析4:其餘方式獲取Bean的過程分析Spring原始碼Bean
- 獲取spring裡的beanSpringBean
- 在Spring boot中通過ApplicationContext獲取bean失敗Spring BootAPPContextBean
- Groovy獲取Bean兩種方式(奇淫技巧操作)Bean
- PG獲取檔案大小的幾種方式
- 程式碼迭代的幾種方式
- spring注入bean的幾種策略模式SpringBean模式
- Spring Bean的3種裝配方式SpringBean
- 獲取或操作DOM元素特性的幾種方式
- Spring Boot讀取配置檔案的幾種方式Spring Boot
- Springboot啟動了哪些bean?這兩種方式可以獲取Spring BootBean
- Laravel 幾種少用的排序方式程式碼Laravel排序
- 獲取Java執行緒返回值的幾種方式Java執行緒
- Java中獲取Class物件的三種方式Java物件
- js獲取數字陣列最大值的幾種方式JS陣列
- spring-boot-route(二)讀取配置檔案的幾種方式Springboot
- Spring Boot中初始化資源的幾種方式Spring Boot
- 在Windows, Mac, Linux三種系統中分別獲取wifi密碼的方式WindowsMacLinuxWiFi密碼
- 在 .NET 中建立物件的幾種方式的對比物件
- Spring基礎之 IOC九種bean宣告方式SpringBean
- Spring Boot EL獲取配置檔案中的值的方式Spring Boot
- Oracle 獲取整數方式程式碼整理Oracle
- 直播系統原始碼,MAP的幾種取資料的方式原始碼
- php讀取檔案的幾種方式PHP
- Java獲取Spring的各種物件JavaSpring物件
- IOS 自動化,幾種特殊情況下 UI 元素獲取的方式iOSUI
- web前端換行程式碼的幾種實現方式!Web前端行程
- Spring原始碼剖析4:懶載入的單例Bean獲取過程分析Spring原始碼單例Bean
- 4、Spring IOC容器 Bean物件例項化的3種方式SpringBean物件
- SpringBoot讀取配置資料的幾種方式Spring Boot
- 程式間的幾種通訊方式
- 獲取Spring容器中Bean例項的工具類(Java泛型方法實現)SpringBeanJava泛型
- 好程式設計師Java學習路線分享Spring建立Bean的3種方式程式設計師JavaSpringBean