spring容器最基本的接口是BeanFactory,其有一个子接口ApplicationContext,也被称为spring上下文。
BeanFactory的一个实现类为XmlBeanFactory。
ApplicationContext有三个实现类,平时使用它更方便,分别为FileSystemXmlApplicationContext、ClassPathXmlApplicationContext、AnnotationConfigApplicationContext。
Bean类通过实现spring容器:
bean类通过实现ApplicationContextAware接口,实现setApplicationContext()方法(spring容器自动调用),可获取spring容器。
1、GetApplicationContext类实现ApplicationContextAware接口
package myspring.com.bean;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class GetApplicationContext implements ApplicationContextAware {
private ApplicationContext act;
@Override
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
// TODO Auto-generated method stub
this.act = arg0;
}
public ApplicationContext getAct(){
return this.act;
}
}
2、在bean.xml中配置该类,与配置普通bean没有任何区别
<!-- bean类获取spring容器 -->
<bean id = "getAct" class="myspring.com.bean.GetApplicationContext"></bean>
3、测试类
package myspring.com.service;
import myspring.com.bean.GetApplicationContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class BeanGetAct {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext act = new FileSystemXmlApplicationContext("config/bean.xml");
GetApplicationContext getAct = act.getBean("getAct",GetApplicationContext.class);
System.out.println(act == getAct.getAct());
}
}
4、输出结果
true
spring容器中bean的作用域scope属性
1、singleton,只实例化一次(默认)
2、prototype,调用一次getBean方法则实例化一个新的对象
3、request、session、global session,需要在web.xml中配置Listener或者filter才能使用,除非前端使用的是spring MVC框架拦截请求则不需要额外的配置