1. 程式人生 > >學習 Spring (五) Aware 接口

學習 Spring (五) Aware 接口

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 接口