本节主要介绍了以下内容:
1 aware介绍
2 代码演练
3 课程总结
1 aware介绍
1.1 为什么要使用aware?
在java类中,可以方便的获取xml配置文件中的bean的各个属性。通过不同的aware可以获取不同的bean的属性
1.2 有哪些类型的aware?
常见的有:
applicationContextAware(获取bean)
beanNameAware(获取beanname)
还有
beanFactoryAware等等
2 代码演练
2.1 applicationContextAware(验证aware获取的applicationContext 和测试获取的applicationContext 为同一个)
实体类:
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 arg0) throws BeansException { System.out.println("MoocApplicationContext========》"+arg0.getBean("moocApplicationContext").hashCode()); } }
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> <!-- <bean id="moocBeanName" class="com.imooc.aware.MoocBeanName"></bean> --> </beans>
测试类:
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"); } //测试ApplicationContext aware @Test public void testMoocApplicationContext(){ System.out.println("testApplicationContext======》"+super.getbean("moocApplicationContext").hashCode()); } //测试BeanNameAware /*@Test public void testMoocBeanName(){ }*/ }
打印结果:
二月 27, 2019 6:37:13 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5abce07: startup date [Wed Feb 27 18:37:13 CST 2019]; root of context hierarchy
二月 27, 2019 6:37:13 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-aware.xml]
MoocApplicationContext========》282483842
testApplicationContext======》282483842
二月 27, 2019 6:37:13 下午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@5abce07: startup date [Wed Feb 27 18:37:13 CST 2019]; root of context hierarchy
2.2 beanNameAware(获取xml配置中的beanname)
实体类:
package com.imooc.aware; import org.springframework.beans.factory.BeanNameAware; public class MoocBeanName implements BeanNameAware{ @Override public void setBeanName(String arg0) { // TODO Auto-generated method stub System.out.println("beanName为"+arg0); } }
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>
测试类:
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"); } //测试BeanNameAware @Test public void testMoocBeanName(){ } }
打印结果:
二月 27, 2019 7:17:55 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2e9a6f43: startup date [Wed Feb 27 07:17:55 CST 2019]; root of context hierarchy 二月 27, 2019 7:17:55 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from class path resource [spring-aware.xml] beanName==moocBeanName 二月 27, 2019 7:17:56 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose 信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@2e9a6f43: startup date [Wed Feb 27 07:17:55 CST 2019]; root of context hierarchy
3 课程总结
aware获取的bean和服务器调用的bean的内存地址完全一致。