1、加注解的类或xml里配的bean,最终都会加载到bean工厂里;
2、BeanFactory 有两个重要的子类:BeanDefinitionRegistry和XMLBeanFactory;
BeanDefinitionRegistry,他的工作是记录bean的个人信息,如:id是多少,class路径,是不是单例,需不需要懒加载等等;
XmlBeanFactory,他是BeanFactory的最重要的子类,过去是,意思是现在已经被舍弃了,几乎不用了。简单说说下他的用法:
XmlBeanFactory beanFactory = new XmlBeanFactory(resource) 这个recource就是上一篇所说的资源对象;
//获取Bean对象
Text text = (Text) beanFactory.getBean("text");
3、BeanFactory又扩展了一个类,那就是ApplicationContext;
ApplicationContext 与 XmlBeanFactory 最突出的不同点就是 前者在加载资源文件的时候就顺带着把对象给创建好了放在内存里了,而后者则不是。后者是在调用getBean的时候才去创建对象;
ApplicationContext比XmlBeanFactory多了bean的生命周期、资源文件加载,国际化等功能。
4、ApplicationContext有三个核心子类:
ClassPathXMLApplicationContext:
WebApplicationContext:
FileSystemXmlApplicationContext:
5、获取的方法:
第一种:
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/bean.xml");
还可以:多个文件同时加载:
new ClassPathXmlApplicationContext(new String[]{"classpath:bean.xml","classpath:bean2.xml","d://bean.xml"});
第二种:
ApplicationContext context = new FileSystemXmlApplicationContext("file:/D:/tzprojects/tzspring02/src/bean.xml");
第三种 加载某个包下的所有加注解的类
ApplicationContext context = new AnnotationConfigApplicationContext("com.ioc.ioc3");
UserDao userDao = (UserDao) context.getBean("userDao");
userDao.getUser();
第四种 利用jsp的内置对象获取
web.xml里的配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean*.xml</param-value>
<!-- <param-value>/WEB-INF/classes/bean.xml</param-value> -->
</context-param>
<!-- web容器的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
index.jsp里的配置:
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="com.ioc.ioc.Student"%>
<%@page import="org.springframework.web.context.WebApplicationContext"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
//1:web.xml进行注册
//WebApplicationContext context = (WebApplicationContext)application.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(application);
Student student = (Student)context.getBean("student");
student.responseAsk("讲课");
%>