锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Spring涓彁渚涗竴浜汚ware鐩稿叧鎺ュ彛錛屽儚鏄疊eanFactoryAware銆?ApplicationContextAware銆丷esourceLoaderAware銆丼ervletContextAware絳夌瓑錛屽疄鐜拌繖浜?Aware鎺ュ彛鐨凚ean鍦ㄨ鍒濆涔嬪悗錛屽彲浠ュ彇寰椾竴浜涚浉瀵瑰簲鐨勮祫婧愶紝渚嬪瀹炵幇BeanFactoryAware鐨凚ean鍦ㄥ垵濮嬪悗錛孲pring瀹瑰櫒灝嗕細(xì)娉ㄥ叆BeanFactory鐨勫疄渚嬶紝鑰屽疄鐜癆pplicationContextAware鐨凚ean錛屽湪Bean琚垵濮嬪悗錛屽皢浼?xì)琚敞鍏?ApplicationContext鐨勫疄渚嬬瓑絳夈?/span>
銆Bean鍙栧緱BeanFactory銆丄pplicationContextAware鐨勫疄渚嬬洰鐨勬槸浠涔堬紝涓鑸殑鐩殑灝辨槸瑕佸彇寰椾竴浜涙。妗堣祫婧愮殑瀛樺彇銆佺浉 鍏寵鎭祫婧愭垨鏄偅浜涜娉ㄥ叆鐨勫疄渚嬫墍鎻愪緵鐨勬満鍒訛紝渚嬪ApplicationContextAware鎻愪緵浜唒ublishEvent()鏂規(guī)硶錛屽彲浠ユ敮鎸佸熀浜嶰bserver妯″紡鐨勪簨浠朵紶鎾満鍒躲?/span>
銆ApplicationContextAware鎺ュ彛鐨勫畾涔夊涓嬶細(xì)
ApplicationContextAware.java
public interface ApplicationContextAware {
void setApplicationContext(ApplicationContext context);
}
銆鎴戜滑榪欒竟紺鴻寖濡備綍閫忚繃瀹炵幇ApplicationContextAware娉ㄥ叆ApplicationContext鏉ュ疄鐜頒簨浠朵紶鎾紝棣栧厛鎴戜滑鐨凥elloBean濡備笅錛?/span>
HelloBean.java
package onlyfun.caterpillar;
import org.springframework.context.*;
銆
public class HelloBean implements ApplicationContextAware {
private ApplicationContext applicationContext;
private String helloWord = "Hello!World!";
public void setApplicationContext(ApplicationContext context) {
this.applicationContext = context;
}
public void setHelloWord(String helloWord) {
this.helloWord = helloWord;
}
public String getHelloWord() {
applicationContext.publishEvent(
new PropertyGettedEvent("[" + helloWord + "] is getted"));
return helloWord;
}
}
銆ApplicationContext浼?xì)鐢盨pring瀹瑰櫒娉ㄥ叆錛宲ublishEvent()鏂規(guī)硶闇瑕佷竴涓戶鎵緼pplicationEvent鐨勫璞★紝鎴戜滑鐨凱ropertyGettedEvent緇ф壙浜咥pplicationEvent錛屽涓嬶細(xì)
PropertyGettedEvent.java
package onlyfun.caterpillar;
import org.springframework.context.*;
public class PropertyGettedEvent extends ApplicationEvent {
public PropertyGettedEvent(Object source) {
super(source);
}
}
銆褰揂pplicationContext鎵цpublishEvent()鍚庯紝浼?xì)鑷姩瀵绘墤之炵幇ApplicationListener鎺ュ彛鐨勫璞″茍閫氱煡鍏跺彂鐢熷搴斾簨浠訛紝鎴戜滑瀹炵幇浜哖ropertyGettedListener濡備笅錛?/span>
PrppertyGettedListener.java
package onlyfun.caterpillar;
import org.springframework.context.*;
public class PropertyGettedListener implements ApplicationListener {
public void onApplicationEvent(ApplicationEvent event) {
System.out.println(event.getSource().toString());
}
}
銆Listener蹇呴』琚疄渚嬪寲錛岃繖鎴戜滑鍙互鍦˙ean瀹氫箟妗d腑鍔犱互瀹氫箟錛?/span>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="propertyGetterListener" class="onlyfun.caterpillar.PropertyGettedListener"/>
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord"><value>Hello!Justin!</value></property>
</bean>
</beans>
銆鎴戜滑鍐欎竴涓祴璇曠▼搴忔潵嫻嬫祴浜嬩歡浼犳挱鐨勮繍琛岋細(xì)
Test.java
package onlyfun.caterpillar;
import org.springframework.context.*;
import org.springframework.context.support.*;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
HelloBean hello = (HelloBean) context.getBean("helloBean");
System.out.println(hello.getHelloWord());
}
}
銆鎵ц緇撴灉浼?xì)濡備笅鎵紺猴細(xì)
log4j:WARN No appenders could be found for logger
(org.springframework.beans.factory.xml.XmlBeanDefinitionReader).
log4j:WARN Please initialize the log4j system properly.
org.springframework.context.support.ClassPathXmlApplicationContext:
displayName=[org.springframework.context.support.ClassPathXmlApplicationContext;
hashCode=33219526]; startup date=[Fri Oct 29 10:56:35 CST 2004];
root of ApplicationContext hierarchy
[Hello!Justin!] is getted
Hello!Justin!
銆浠ヤ笂鏄互瀹炵幇浜嬩歡浼犳挱鏉ョ湅鐪嬪疄鐜癆ware鎺ュ彛鍙栧緱瀵瑰簲瀵硅薄鍚庯紝鍙互榪涜鐨勫姩浣滐紝鍚屾牱鐨勶紝鎮(zhèn)ㄤ篃鍙互瀹炵幇ResourceLoaderAware鎺ュ彛錛?/span>
ResourceLoaderAware.java
public interface ResourceLoaderAware {
void setResourceLoader(ResourceLoader loader);
}
銆瀹炵幇ResourceLoader鐨凚ean灝卞彲浠ュ彇寰桼esourceLoader鐨勫疄渚嬶紝濡傛灝卞彲浠ヤ嬌鐢ㄥ畠鐨刧etResource()鏂規(guī)硶錛岃繖瀵逛簬蹇呴』瀛樺彇妗f璧勬簮鐨凚ean鐩稿綋鏈夌敤銆?/span>
銆鍩烘湰涓婏紝Spring铏界劧鎻愪緵浜嗚繖浜汚ware鐩稿叧鎺ュ彛錛岀劧鑰孊ean涓婅嫢瀹炵幇浜嗚繖浜涚晫闈紝灝辯畻鏄笌Spring鍙戠敓浜嗕緷璧栵紝浠庡彟涓涓搴︽潵鐪嬶紝铏界劧鎮(zhèn)ㄥ彲浠ョ洿鎺ュ湪Bean涓婂疄鐜拌繖浜涙帴鍙o紝浣嗘?zhèn)ㄤ篃鍙互閫忚繃setter鏉ュ畬鎴愪緷璧栨敞鍏ワ紝渚嬪錛?/span>
HelloBean.java
package onlyfun.caterpillar;
import org.springframework.context.*;
public class HelloBean {
private ApplicationContext applicationContext;
private String helloWord = "Hello!World!";
public void setApplicationContext(ApplicationContext context) {
this.applicationContext = context;
}
public void setHelloWord(String helloWord) {
this.helloWord = helloWord;
}
public String getHelloWord() {
applicationContext.publishEvent(new PropertyGettedEvent("[" + helloWord + "] is getted"));
return helloWord;
}
}
銆娉ㄦ剰榪欐鎴戜滑騫舵病鏈夊疄鐜癆pplicationContextAware錛屾垜浠湪紼嬪簭涓彲浠ヨ嚜琛屾敞鍏pplicationContext瀹炰緥錛?/span>
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
HelloBean hello = (HelloBean) context.getBean("helloBean");
hello.setApplicationContext(context);
System.out.println(hello.getHelloWord());
銆灝盉ean鑰岃█錛岄檷浣庝簡瀵筍pring鐨勪緷璧栵紝鍙互姣旇緝瀹規(guī)槗浠庣幇鏈夌殑妗嗘灦涓劚紱匯?/span>