您的位置:首页 > 编程语言 > Java开发

Spring中Aware接口的使用

2016-03-22 22:05 411 查看
Spring中提供了一些Aware接口,这些可以让bean被初始化(加载xml)之后获得一些资源,这里我们着重讲2个接口:ApplicationContextAware与BeanNameAware

第一步:配置xml,并实现要继承的2个类和测试类

xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns="http://www.springframework.org/schema/beans"

 xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="moocApplicationContext" class="com.imooc.aware.MoocApplicationContext"></bean>

<bean id="moocBeanName" class="com.imooc.aware.MoocBeanName"></bean>

</beans>

继承ApplicationContextAware的类

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 {

  System.out.println(applicationContext.getBean("moocApplicationContext").hashCode());

  

 }

}

继承BeanNameAware的类

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);

 }

}

测试类

package com.imooc.aware;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAware {

 public static void main(String[] args) {

     ApplicationContext ctx=new ClassPathXmlApplicationContext("spring-aware.xml");

 } 

}

原理:在加载xml时,继承过ApplicationContextAware的类在重载方法setApplicationContext可以获取某一个bean的实例,即在加载xml过程,就可定义对象的实例

同样的对于继承过BeanNameAware的类而言,通过重写setBeanName可以获得该类的bean的id。

说到这里,其实我们通常会让一个类同时继承它们两个,然后获得这个类bean的id,在通过getbean(id)获得该类的实例,这样我们就在xml初始化时就定义好了一个实例

我们改写MoocBeanName来进行测试

package com.imooc.aware;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.BeanNameAware;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

public class MoocBeanName implements BeanNameAware,ApplicationContextAware {

 String lblname=null;

 @Override

 public void setBeanName(String Name) {

  lblname=Name;

  System.out.println("MoocBeanName"+Name)
4000
;

 }

 @Override

 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

  System.out.println(applicationContext.getBean(lblname).hashCode());

  

 }

}

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: