學習 Spring (五) Aware 接口
阿新 • • 發佈:2019-02-25
www. ext.get cep tps pub ase mea 操作 cbe
Spring入門篇 學習筆記
Spring 中提供了一些以 Aware 結尾的接口,實現了 Aware 接口的 bean 在被初始化之後可以獲取相應資源
- 通過 Aware 接口,可以對 Spring 相應資源進行操作(一定要慎重)
- 為對 Spring 進行簡單的擴展提供了方便的入口
示例
ApplicationContextAware
添加配置文件 spring-aware-applicationcontext.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.karonda.aware.MoocApplicationContext" ></bean> </beans>
實現接口:
public class MoocApplicationContext implements ApplicationContextAware { @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("MoocApplicationContext : " + applicationContext.getBean("moocApplicationContext").hashCode()); } }
添加測試類:
@RunWith(BlockJUnit4ClassRunner.class) public class TestApplicationContextAware extends UnitTestBase { public TestApplicationContextAware() { super("classpath:spring-aware-applicationcontext.xml"); } @Test public void testMoocApplicationContext() { System.out.println("testMoocApplicationContext : " + super.getBean("moocApplicationContext").hashCode()); } }
MoocBeanName
添加配置文件 classpath:spring-aware-beanname.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.karonda.aware.MoocBeanName" ></bean>
</beans>
實現接口:
public class MoocBeanName implements BeanNameAware {
@Override
public void setBeanName(String name) {
System.out.println("MoocBeanName : " + name);
}
}
添加測試類:
@RunWith(BlockJUnit4ClassRunner.class)
public class TestBeanNameAware extends UnitTestBase {
public TestBeanNameAware() {
super("classpath:spring-aware-beanname.xml");
}
@Test
public void textMoocBeanName() {
System.out.println("textMoocBeanName : " + super.getBean("moocBeanName"));
}
}
同時實現 ApplicationContextAware 和 MoocBeanName
修改 MoocBeanName:
public class MoocBeanName implements BeanNameAware, ApplicationContextAware {
private String beanName;
@Override
public void setBeanName(String name) {
this.beanName = name;
System.out.println("MoocBeanName : " + name);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
System.out.println("setApplicationContext : " + applicationContext.getBean(this.beanName).hashCode());
}
}
修改 TestBeanNameAware:
@RunWith(BlockJUnit4ClassRunner.class)
public class TestBeanNameAware extends UnitTestBase {
public TestBeanNameAware() {
super("classpath:spring-aware-beanname.xml");
}
@Test
public void textMoocBeanName() {
System.out.println("textMoocBeanName : " + super.getBean("moocBeanName").hashCode());
}
}
源碼:learning-spring
學習 Spring (五) Aware 接口