Spring 实现原理
一、 Spring核心I/O以及AOP
1. Spring出现原因及目标
之前EJB的J2EE服务对代码有侵入性,使得开发与测试都比较困难;
而Spring则将J2EE的服务抽象出来,通过Ioc以及AOP来添加这些服务,一方面普通的业务POJO类更容易开发和测试,另一方面用则添加的模式也减少了框架复杂性;
2. Resource,ResourceLoader(BeanDefinitionReader),BeanDefinition,BeanDefinitionRegistry,BeanFactory,ApplicationContext,FactoryBean关系
1)通过Resource接口定位不同的资源文件,如classpath,file,url等;
2)通过ResourceLoader(BeanDefinitionReader)来加载,解析资源文件,从而产生Bean定义对象BeanDefinition;
3)向BenaFactory中注册BeanDefinition对象;
4)BeanFactory对象产生FactoryBean对象,并根据BeanDefinition的配置指导FactoryBean产生通用的Bean;
而ApplicationContext相当于Facade外观模式,整合常用的Resource,ResourceLoader,BeanFactory,BeanDefinition,同时会标识应用环境,捕获各种事件等;
3. Spring中获取对象工厂的方法:
1)初始化ApplicationContext对象
代码:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
适用于独立的应用程序,而非B/S程序,因为其是一个独立的容器,得到的是一个新的对象,而B/S中通常需要的是应用程序中的相同对象;
2)通过Spring提供的工具类获取ApplicationContext对象
代码:
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
适用于Action层,因为其需要获取到ServletContext对象;
3)继承自抽象类ApplicationObjectSupport
抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
一、 Spring核心I/O以及AOP
1. Spring出现原因及目标
之前EJB的J2EE服务对代码有侵入性,使得开发与测试都比较困难;
而Spring则将J2EE的服务抽象出来,通过Ioc以及AOP来添加这些服务,一方面普通的业务POJO类更容易开发和测试,另一方面用则添加的模式也减少了框架复杂性;
2. Resource,ResourceLoader(BeanDefinitionReader),BeanDefinition,BeanDefinitionRegistry,BeanFactory,ApplicationContext,FactoryBean关系
1)通过Resource接口定位不同的资源文件,如classpath,file,url等;
2)通过ResourceLoader(BeanDefinitionReader)来加载,解析资源文件,从而产生Bean定义对象BeanDefinition;
3)向BenaFactory中注册BeanDefinition对象;
4)BeanFactory对象产生FactoryBean对象,并根据BeanDefinition的配置指导FactoryBean产生通用的Bean;
而ApplicationContext相当于Facade外观模式,整合常用的Resource,ResourceLoader,BeanFactory,BeanDefinition,同时会标识应用环境,捕获各种事件等;
3. Spring中获取对象工厂的方法:
1)初始化ApplicationContext对象
代码:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
适用于独立的应用程序,而非B/S程序,因为其是一个独立的容器,得到的是一个新的对象,而B/S中通常需要的是应用程序中的相同对象;
2)通过Spring提供的工具类获取ApplicationContext对象
代码:
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
适用于Action层,因为其需要获取到ServletContext对象;
3)继承自抽象类ApplicationObjectSupport
抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。