Spring中Aware接口的使用

论坛 期权论坛 脚本     
匿名技术用户   2021-1-3 16:45   11   0

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

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println(applicationContext.getBean(lblname).hashCode());

}

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP