1. BeanpostProcessor,BeanFactoryPostProcessor区别

spring初始化bean流程

定义bean标签 > 将bean标签解析成BeanDefinition > 调用构造方法实例化(IOC) > 属性值依赖注入(DI) > init-method
BeanpostProcessor BeanFactoryPostProcessor
发生在Spring容器的实例化和依赖注入之后,init-method前后 BeanDefinition之后,IOC之前

2. BeanFactory和ApplicationContext作用与区别

BeanFactory:
是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;

ApplicationContext:
应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;

  1. 国际化(MessageSource)
  2. 访问资源,如URL和文件(ResourceLoader)
  3. 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
  4. 消息发送、响应机制(ApplicationEventPublisher)
  5. AOP(拦截器)

3. 如何从文件系统加载spring xml文件

一: XmlBeanFactory 引用资源
Resource resource = new ClassPathResource(“appcontext.xml”);
BeanFactory factory = new XmlBeanFactory(resource);

二: ClassPathXmlApplicationContext 编译路径
ApplicationContext factory=new ClassPathXmlApplicationContext(“classpath:appcontext.xml”);
// src目录下的
ApplicationContext factory=new ClassPathXmlApplicationContext(“appcontext.xml”);
ApplicationContext factory=new ClassPathXmlApplicationContext(new String[] {“bean1.xml”,“bean2.xml”});
// src/conf 目录下的
ApplicationContext factory=new ClassPathXmlApplicationContext(“conf/appcontext.xml”);
ApplicationContext factory=new ClassPathXmlApplicationContext(“file:G:/Test/src/appcontext.xml”);

三: 用文件系统的路径
ApplicationContext factory=new FileSystemXmlApplicationContext(“src/appcontext.xml”);
//使用了 classpath: 前缀,作为标志, 这样,FileSystemXmlApplicationContext 也能够读入classpath下的相对路径
ApplicationContext factory=new FileSystemXmlApplicationContext(“classpath:appcontext.xml”);
ApplicationContext factory=new FileSystemXmlApplicationContext(“file:G:/Test/src/appcontext.xml”);
ApplicationContext factory=new FileSystemXmlApplicationContext(“G:/Test/src/appcontext.xml”);

四: XmlWebApplicationContext是专为Web工程定制的。
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );

五: 使用BeanFactory
BeanDefinitionRegistry reg = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg);
reader.loadBeanDefinitions(new ClassPathResource(“bean1.xml”));
reader.loadBeanDefinitions(new ClassPathResource(“bean2.xml”));
BeanFactory bf=(BeanFactory)reg;

六:Web 应用启动时加载多个配置文件 【目前项目中xml比较多】
通过ContextLoaderListener 也可加载多个配置文件,在web.xml文件中利用

<context-pararn>元素来指定多个配置文件位置,其配置如下: 
<context-param> 
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:config/*.xml   //代表加载类路径下config下的所有xml文件
        </param-value>
 </context-param>

4. 多个bean初始化顺序

  1. 构造方法依赖
  2. @DependOn 注解
    需要注意的是 bean 的初始化方法调用顺序无法保证
  3. BeanPostProcessor手动控制
    重写postProcessAfterInstantiation方法

5. spring Ioc,AOP的核心技术

6. spring中事务如何实现

7. spring的设计模式

8. spring AOP的应用场景