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());
}
}
第一步:配置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());
}
}
相关文章推荐
- JVM —— Java 对象占用空间大小计算
- Java静态函数、父类、子类执行顺序
- Java单例模式和volatile关键字
- JDK安装与环境变量的配置
- mybasit ,maven,spring-mvc与spring 的整合
- spring 注入学习
- java URL转PDF文件
- Java 类区别
- Spring配置概述
- 大家一起和snailren学java-(四)初始化与清理
- Java的Log系统介绍和切换(转)
- JavaWeb 后端 <十一> 之 DBUtils 框架 (基本使用 结果集 事务处理 对表读取)
- JAVA_Web_Listener
- java:double四舍五入并保留两位小数的方法
- Java初学者需掌握的30个基本概念
- Java并发编程:volatile关键字解析
- struts自定义类型转换器,局部和全局
- java基础回顾笔记-io流2
- maven创建web工程Spring配置文件找不到问题解决方案
- 解决maven项目update project会更改jdk版本问题