Spring学习笔记(七)

1、Bean如何获取Spring容器:

1)、实际开发中,项目一般都是在web.xml中配置一个监听器来初始化Spring容器,而有时候Bean需要有访问Spring容器的能力,此时有两种方式来获取
2)、第一种:实现BeanFactoryAware接口,这个接口里面有一个方法,void setBeanFactory(BeanFactory beanFactory),方法的参数指向创建这个Bean的BeanFactory。只要Bean实现了这个接口,Spring会自动把当前容器作为参数注入到这个方法中。
3)、与之类似的第二种:实现ApplicationContextAware接口,这个接口里有一个方法,void setApplicationContext(ApplicationContext applicationContext)。

2、创建一个实现了ApplicationContextAware接口的类:

package com.sxit.service;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

//实现了ApplicationContextAware接口,表示这个实例可以直接访问创建自己的Spring容器
public class Chinese implements ApplicationContextAware {

	private ApplicationContext apc;
	
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		this.apc = applicationContext;
	}

	public ApplicationContext getApc() {
		return apc;
	}
}

3、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-3.0.xsd ">

	<bean id="chinese" class="com.sxit.service.Chinese" />
		
</beans>

4、测试类:

package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sxit.service.Chinese;

public class Test2 {

	public static void main(String[] args) {

		ApplicationContext apc = new ClassPathXmlApplicationContext("Bean3.xml");
		Chinese chinese = apc.getBean("chinese", Chinese.class);
		System.out.println("chinese中的容器:"+chinese.getApc());
		System.out.println("容器:"+apc);
		System.out.println(chinese.getApc()==apc);
	}
}

 5、打印信息:

chinese中的容器:org.springframework.context.support.ClassPathXmlApplicationContext@c1b531: startup date [Tue Nov 06 08:41:52 GMT 2012]; root of context hierarchy
容器:org.springframework.context.support.ClassPathXmlApplicationContext@c1b531: startup date [Tue Nov 06 08:41:52 GMT 2012]; root of context hierarchy
true

 6、总结:

1)、实现了ApplicationContextAware接口的Bean虽然让它拥有了访问容器的能力,但是会使代码与Spring接口耦合在一起,所以并不建议这样做。

猜你喜欢

转载自luan.iteye.com/blog/1717673
今日推荐