相当于从集合中通过id名称获取对象(看上去似乎时类似操作)?
此处接口必须实现的方法是一个在加载时就会执行的set方法,在IOC容器中生成对象后,因为后面调用的就是之前生成的容器中的这个对象,所以hash值相同,是为一个对象。
Aware Injected Dependency
Aware
Aware接口的实现可以帮助我们获得资源,就好比取得ServletConfig和ServletContext
what is Aware
Aware接口:
定义:Spring中提供了一些以Aware结尾的接口,实现了Aware接口的Bean在被初始化后,可以获取相应资源,通过Aware接口,可以对Spring相应资源进行操作(慎重),前提配置<bean>标签,并使用ioc容器去记性加载。
ApplicationContextAware:Bean类实现该接口,通过覆盖该接口提供的setApplicationContext方法,可以直接获取spring上下文,而不用我们自己手动创建。
BeanNameAware:Bean类实现该接口,通过覆盖该接口提供的setBeanName方法,可以得到bean的name(id)
同时实现两个接口,通过setBeanName可以得到bean的name,通过applicationContext.getBean(this.name)得到此bean的实例。
定义:Spring中提供了一些以Aware结尾的接口,实现了Aware接口的Bean在被初始化后,可以获取相应资源,通过Aware接口,可以对Spring相应资源进行操作(慎重),前提配置<bean>标签,并使用ioc容器去记性加载。
ApplicationContextAware:Bean类实现该接口,通过该接口提供的方法,可以直接获取spring上下文,而不用我们自己手动创建。
Spring中的Aware接口2
Spring中的Aware接口1
Aware的两种常用接口
Spring中的Aware接口
spring Bean可以实现相应的aware接口,之后在该Bean对象中就可以获取到IOC容器中的一些资源
Aware接口
定义:Spring中提供了一些以Aware结尾的接口,实现了Aware接口的Bean在被初始化后,可以获取相应资源,通过Aware接口,可以对Spring相应资源进行操作(慎重),前提配置<bean>标签,并使用ioc容器去记性加载。
ApplicationContextAware:Bean类实现该接口,通过该接口提供的方法,可以直接获取spring上下文,而不用我们自己手动创建。
BeanNameAware:Bean类实现该接口,通过该接口提供的方法,可以直接获取<bean>标签的Id。
ApplicationEventPublisherAware:提供事件的发布。
BeanClassLoaderAware:找到相关的类加载器。
案例:通过传入的Bean的ID和传入的ApplicationContext对象,来获取Bean的对象(原理:IOC容器加载配置文件,通过<bean>标签,去实例化Bean,由于实现了XXXAware接口,通过setXXX方法,去获取相应的资源)
public class MoocApplicationContext implements ApplicationContextAware,BeanNameAware {
private String name;(通过这种方式就可以在其他方法中进行使用该对象,例如判断某个对象是否存在)
@Override
public void setApplicationContext(ApplicationContext ac) throws BeansException {
System.out.println("setApplicationContext的ApplicationContext:"+ac.hashCode());
System.out.println(ac.getBean(this.name,MoocApplicationContext.class));
}
@Override
public void setBeanName(String name) {
this.name=name;
System.out.println("setBeanNamename的方法"+name);
}
}
xml:
<bean id="moocApplicationContext" class="MoocApplicationContext" ></bean>
测试:
@Test
public void testMooc(){
ApplicationContext ac=new ClassPathXmlApplicationContext("spring-ioc.xml");
System.out.println("test的ApplicationContext:"+ac.hashCode());
}
结果:
setBeanNamename的方法moocApplicationContext
setApplicationContext的ApplicationContext:1516607441
MoocApplicationContext@4c7335b1
test的ApplicationContext:1516607441
Aware的三个特性如下
Aware接口:
(1)在bean初始化之后,可以获取相应的资源。 (2)通过Aware接口,可以对Spring相应资源进行操作。(3)对Spring进行简单的扩展。
Spring中提供了一些以Aware结尾的接口
Aware的介绍
实现了ApplicationContextAware接口可以获得applicationContext上下文信息
常用aware实现类
常用的Aware实现类
实现了Aware结尾的接口的实现类,可以在bean被初始化之后获取相应的资源;
获得的资源操作要慎重,资源都是容器的核心资源,操作很可能造成异常
Aware接口
Spring Aware接口
常用Spring中的Aware接口3