1. 程式人生 > >Spring:Aware結尾介面的用途——向容器獲取資源

Spring:Aware結尾介面的用途——向容器獲取資源

Aware結尾的介面用途——向容器獲取資源。

對兩個介面舉例:BeanNameAware,ApplicationContextAware。

首先對ApplicationContextAware介面的實現做一個例項:

//1.類
package com.imooc.aware;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;


public class MoocApplicationContext implements ApplicationContextAware  {
	
//重寫介面方法
	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
//這裡就可以從容器內獲取自身的bean。
		System.out.println("MoocApplicationContext : " + applicationContext.getBean("moocApplicationContext"));
	}
	
}
//2.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd" >
        
	<bean id="moocApplicationContext" class="com.imooc.aware.MoocApplicationContext" ></bean>
        
 </beans>
//3.測試
package com.imooc.test.aware;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

//import com.imooc.aware.MoocApplicationContext;
import com.imooc.test.base.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)
public class TestAware extends UnitTestBase {
	
	public TestAware() {
		super("classpath:spring-aware.xml");
	}
	
	@Test
	public void testMoocApplicationContext() {		
	System.out.println("testMoocApplicationContext : " + super.getBean("moocApplicationContext"));
	
	}
}
//4,結果
8月 02, 2018 1:11:55 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
資訊: Refreshing org[email protected]146044d7: startup date [Thu Aug 02 13:11:55 CST 2018]; root of context hierarchy
8月 02, 2018 1:11:55 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
資訊: Loading XML bean definitions from class path resource [spring-aware.xml]
MoocApplicationContext : 252277567
testMoocApplicationContext : 252277567
8月 02, 2018 1:11:55 下午 org.springframework.context.support.AbstractApplicationContext doClose
資訊: Closing org[email protected]146044d7: startup date [Thu Aug 02 13:11:55 CST 2018]; root of context hierarchy

可以看到在首先是setApplicationContext()方法的輸出,然後是測試類方法的輸出,其中兩個返回都是xml配置的容器中相同的bean物件,說明這個操作,可以讓類獲取容器中的bean物件資源(這塊確實不太懂)。

下面是第二個例項,實現BeanNameAware介面,

//1.類
package com.imooc.aware;

import org.springframework.beans.factory.BeanNameAware;

public class MoocBeanName implements BeanNameAware {
	
	@Override
	public void setBeanName(String name) {
		System.out.println("MoocBeanName : " + name);
	}
}

這個是讀取容器裡bean的name的作用,所以不用getBean。

//2.xml檔案配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd" >
        
	<bean id="moocBeanName" class="com.imooc.aware.MoocBeanName" ></bean> 
        
 </beans>
//3.測試類
package com.imooc.test.aware;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import com.imooc.test.base.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)
public class TestAware extends UnitTestBase {
	
	public TestAware() {
		super("classpath:spring-aware.xml");
	}
	@Test
	public void textMoocBeanName() {
		System.out.println("textMoocBeanName : " + super.getBean("moocBeanName"));
	}
	
}
//4.結果
8月 02, 2018 1:23:12 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
資訊: Refreshing org[email protected]146044d7: startup date [Thu Aug 02 13:23:12 CST 2018]; root of context hierarchy
8月 02, 2018 1:23:12 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
資訊: Loading XML bean definitions from class path resource [spring-aware.xml]
MoocBeanName : moocBeanName
textMoocBeanName : [email protected]
8月 02, 2018 1:23:12 下午 org.springframework.context.support.AbstractApplicationContext doClose
資訊: Closing org[email protected]146044d7: startup date [Thu Aug 02 13:23:12 CST 2018]; root of context hierarchy

看到在類中獲取了容器內bean的name,在測試類裡面獲得了相應的bean。

這塊內容有點亂,還需要後面繼續加強學習。

相關推薦

SpringAware結尾介面用途——容器獲取資源

Aware結尾的介面用途——向容器獲取資源。 對兩個介面舉例:BeanNameAware,ApplicationContextAware。 首先對ApplicationContextAware介面的實現做一個例項: //1.類 package com.imooc.awa

Spring整理系列(06)——springAware結尾介面

一、關於spring中Aware結尾介面介紹: Spring中提供一些Aware結尾相關介面,像是BeanFactoryAware、 BeanNameAware、ApplicationContextAware、ResourceLoaderAware、Servl

Spring Security教程(五)自定義過濾器從資料庫從獲取資源資訊

  在之前的幾篇security教程中,資源和所對應的許可權都是在xml中進行配置的,也就在http標籤中配置intercept-url,試想要是配置的物件不多,那還好,但是平常實際開發中都往往是非常多的資源和許可權對應,而且寫在配置檔案裡面寫改起來還得該原始碼配置檔案,這顯然是不好的。因此接下來

spring原始碼分析Aware介面讓你的bean對容器直接操作

相信大家都知道很多其他框架,比如mybatis,shiro等等,spring框架本身有些類會實現ApplicationContextAware,BeanFactoryAware或者等等其他XXXAware,這是用來幹嘛呢? spring容器來管理bean。如果說bean需要知道容器的

白話Spring原始碼(八)Aware介面

我們知道spring框架中所有bean都是在工廠裡建立的,bean對自己是“無知覺”的,不知道自己叫什麼名字(bean的id或者name),從哪裡來(哪個工廠建立)。 一、為什麼需要Aware 大家看過黑客帝國電影吧,黑客帝國中機械工廠裡面“養殖”的人類,他們雖然能完成一定的功能,但是根本不

Spring原始碼學習IOC(7)淺析aware相關介面

spring中 有一大堆Aware結尾介面,  例如BeanFactoryAware,  ApplicationContextAware, ServletContextAware等  在程式中 我們自定義的bean實現了 Aware相關介面  spring 通過回撥 

spring cloud: Hystrix(六)feign的註解@FeignClientfallbackFactory(類似於斷容器)與fallback方法

fallbackFactory(類似於斷容器)與fallback方法 feign的註解@FeignClient:fallbackFactory與fallback方法不能同時使用,這個兩個方法其實都類似於Hystrix的功能,當網路不通時返回預設的配置資料. fallback方法的使用: 在入口檔案開

關於 SpringAware 介面

一、Spring所提供的Aware介面: BeanNameAware:在Bean中得到它在IOC容器中的Bean的例項的名字。 BeanFactoryAware:在Bean中得到Bean所在的IOC容器 ApplicationContextAware:在Bean中得到Bean所在的應

Spring——Aware相關介面

Aware,是感應和感知的意思。當bean實現了對應的Aware介面時,BeanFactory會在生產bean時根據它所實現的Aware介面,給bean注入對應的屬性,從而讓bean獲取外界的資訊。 Spring提供了一堆Aware介面: 下面列出幾個主要Aware介面作用:

spring4.1.8擴充套件實戰之二Aware介面揭祕

接下來通過分析spring原始碼,我們來看看典型的Aware子類有哪些,使用場景是什麼? 在spring容器初始化過程中,會執行AbstractApplicationContext類的prepareBeanFactory方法,這裡面會建立一個bean後置處理器

Spring使用InitializingBean,DisposableBean介面實現在專案啟動/關閉時執行操作

最近專案中有一個需求需要一個儲存過程不停的執行,但是儲存過程執行中如果出現異常,自動通知管理員會很麻煩。所以打算直接把呼叫儲存過程這步驟整合進Spring Boot專案中(這樣不論異常捕獲和郵件通知都相對簡單)。 於是考慮使用實現Spring的Initializ

關於SpringAware介面和後置處理器介面(BeanPostProcessor和BeanFactoryPostProcessor)的一些想法

看了關於Aware介面和後置處理器介面(BeanPostProcessor和BeanFactoryPostProcessor),感覺他們之間的功能有點亂,說一下他們之間的區別: (1)從呼叫時間點上看,Aware介面的方法(都是setXXX方法)是在Bean的屬性被設定之後

SpringFactoryBean介面】實現FactoryBean介面Spring在初始化bean時有何不同

問題描述: 最近想要再次熟悉一下阿里中介軟體HSF的用法,在消費HSF時需要在Spring的配置檔案中進行如下配置: <bean id="myClassB" class="com.taobao.hsf.app.spring.util.HSFSpri

spring aware的使用;spring aware 各種介面的作用解析

spring aware的使用: 使用了spring Aware 你的bean將會和spring框架耦合, spring aware 的目的是為了讓bean獲取spring容器的服務: spring 提供的aware的介面: BeanNameAware :可以獲取

springaware介面(5)

2016/1/16 12:45:20 1.Aware spring中提供了一些以Aware結尾的介面,實現了Aware介面的bean在被初始化之後,可以獲取相應資源 通過Aware介面,可以對Spring相應資源進行操作(一定要慎重) 為對Spri

Spring一些常用的Spring Bean擴充套件介面

/** * @author 五月的倉頡 http://www.cnblogs.com/xrq730/p/5721366.html */ public class InstantiationAwareBeanPostProcessorBean implements InstantiationAwareB

spring Aware相關介面

[size=large]在struts框架中用過ServletRequestAware和ServletResponesAware用來獲取對應的例項,現在記錄一下spring中有哪些Aware,使用方式和ServletRe

Spring之AOP的實現(JDK動態代理只能代理介面,不能代理類)

通過動態代理物件,我們可以在動態代理類中加自己想要加的邏輯,而不需要在真實物件的類中新增自己想要的邏輯,提高了程式碼的擴充套件性,降低了耦合性。 java的動態代理機制,缺點:只能代理介面不能代理類。 在學習Spring的時候,我們知道Spring主要有兩大思想,一個

springaware介面

實現org.springframework.beans.factory.aware子介面的Bean類在建立時會在呼叫該bean的init方法之前呼叫aware子介面的相應方法,舉幾個類來說明下: org.springframework.context.Application

趣學Spring一文搞懂Aware、非同步程式設計、計劃任務

你好呀,我是沉默王二,一個和黃家駒一樣身高,劉德華一樣顏值的程式設計師(不信圍觀朋友圈唄)。從 2 位偶像的年紀上,你就可以斷定我的碼齡至少在 10 年以上,但實話實說,我一直堅信自己只有 18 歲,因為好學使我年輕。本篇文章就打算通過我和三妹對話的形式來聊一聊“Spring 的 Aware、非同步程式設計、