-------------------------------------------------------------------Spring简介------------------------------------------------------------
spring:全方位的整合形框架.
2003年spring的第一个版本出现,版本号为1.28
依赖关系:由高到低 | 表现层 | 表现形式:由低到高 | Spring的实例池负责做对象给高层用 |
控制层 | |||
业务逻辑层 | |||
持久层 | |||
数据层 |
Spring框架为分层以架构:由7个模块组成,名模块构建于核心容器之上,核心容器定义了创建/配置及管理bean的方式;
Ø springAOP:AOP的实现;通过配置管理特性, SpringAOP模块将面向切面编程功能集成至框架中,使Spring框架管理的任何对象均支持AOP. SpringAOP模块向基于Spring的应用程序中的对象提供事务管理服务.此模块无需依赖于EJB组件,可以使用SpringAOP将声明性事务管理集成至应用程序中.
Ø springORM:整合其他ORM型框架; Spring框架中插入了若干ORM框架,提供ORM的对象关系工具,包括JDO, hibernate和ibats sql map, 都遵从Spring的能用事务及DAO异常层次结构.
Ø springDAO:spring自己的持久化组件;JDBC DAO抽象层提供了意义重大的异常层次结构,简化了错误处理过程并极大地了需要编写的异常代码(如打开或关闭连接),运用此结构可以管理异常,处理不同数据库供应商招聘的错误消息. SpringDAO的面向JDBC异常遵从能用的DAO异常层次结构.
Ø springWEB: SpringR web层框架;WEB上下文模块建立在应用程序上下文模块之上,向基于WEB的应用程序提供上下文,因而Spring框架支持与struts集成.同时,WEB模块简化了多部分请求的处理过程以及将请求参数绑定至域对象的工作.
Ø SpringContext: Spring的上下文;核心模块的BeanFactory使Spring成为容器,上下文模块使其成为框架,此模块扩展了BeanFactory的概念,增加了对国际化(i18n)的消息.事件的传播以及验证的支持;同时,此模块提供诸多企业服务,如:电子邮件,JNDI访问,EJB集成,远程以及时序调试(Scheduling)服务,支持对棋牌框架(如velocity,freemarker)的集成
Ø Spring Web MVC:整合web框架(如struts);MVC框架是一个全功能的构建WEB应用程序的MVC实现.通过策略接口/MVC框架变为调试可配置,它容纳了大量的视力技术,包括JSP/Velocity/Tiles/iText及POI等.
Ø SpringCore: Spring的核心,(包括IOC:指当上层组件调用下层组件时,通过Spring的配置文件去类型强转): SpringCore胜于提供Spring框架的基本功能,其主要组件为BeanFactory,是工厂模式的实现. BeanFactory使用反射控制(IOC)模式将应用程序的配置及依赖性规范与实际应用程序代码分开.
Spring的特点:
a) 重点是整合WEB层和ORM框架
b) 通过IOC方式解偶合
c) 通过AOP方式解决程序中共性问题并实现IOC思想
------------------------------------------------------------SpringBean封装机制------------------------------------------------------------
Spring以Bean的方式管理所有的组件,在Spring中,任何java对象以及java组件都可以当做Bean.
应用中各层的对象均由Spring管理,对象以bean的方式存在. Spring负责创建Bean的实例并管理其生命周期,bean运行于Spring的容器,Spring的上下文是生产Bean的工厂,bean是Spring工厂生产的实例, Spring产生工厂时,需要确定每个bean的实现类.bean实例的使用者面向接口,因此无须关心bean实例的实现类,Spring工厂负责维护bean实例的实例化,使用者则无须关心.
BeanFactory接口:
BeanFactory由org.springframeword.beans.factory. BeanFactory接口定义,是工厂模式(factory pattern)的实现,负责创建和管理bean. BeanFactory创建及颁发bean,并负责在实例化bean时创建bean之间的关系,此外, BeanFactory还可以参与到bean的生命周期中,调用对象的初始化函数和析构函数(XML中将自行定义的函数称为析构函数).
BeanFactory有实现类,其中org.springframeword.beans.factory.xml.XmlBeanFactory为常用类.但对于大部分java ee,推荐使用ApplicationContext,它是BeanFactory的子接口,常用的实现类是org.springframeword.context.support.FileSystemXmlApplicationContext.
BeanFactory接口代表Spring容器的根接口,Spring任何容器实现类都直接或间接的实现此接口
BeanFactory接口包括以下3个基本方法:
containsBean(String name)
//判断Spring容器是滞包含id为proBean的Bean
Boolean flag=beanFactory.containsBean(“proBean”);
System.out.println(“是否包括proBean的bean:”+flag);
getBean(String name)
//返回id为proBean的bean
propertiesBean=(PropertiesBean)beanFactory.getBean(“proBean”);
propertiesBean.printBean();
//返回ID为proBean且类型为com.hr.persist.PropertiesBean的bean
propertiesBean=(PropertiesBean)beanFactory.getBean(“perBean”,PropertiesBean.class);
propertiesBean.printBean();
getType(String name)
//返回id为proBean的类型
Class classType=beanFactory.getTYpe(“proBean”);
System.out.println(“id为proBean的类型”+classType);
ApplicationContex
Sprin包括两种不同的容器:BeanFactory和ApplicationContext,BeanFactory提供基本的IOC支持;ApplicationContext则基于BeanFactory,提供应用程序框架服务,如从properties文件中读取信息.Spring提供了BeanFactory与ApplicationContext的多个实现.
BeanFactory提供以编程方式操作容器的基本功能,Context包增加了ApplicationContext,使BeanFactory的功能得以扩展,大多数情况下,ApplicationContext允许以声明的方式操作容器,无须手动创建.
ApplicationContext继承了BeanFactory接口,提供BeanFactory的所有功能,同时具有部分新功能
a) 提供国际化的支持
b) 资源访问,如URL和文件
c) 事件传递
d) 载入多个配置文件
ApplicationContext通常使用以下两个实现类:
FileSystemXmlApplicationContext:以指定路径下的XML配置文件创建ApplicationContext
BeanFactory_beanFactory=new_FileSystemXmlApplicationContext(new String[]{“/WebRoot/WEB-INF/classes/applicationContext.xml”,”/WebRoor/WEB-INF/classes/bean.xml”});
ClassPathXmlApplicationContext:以classpath路径下的xml配置文件创建ApplicationContext
//搜索classpath路径,以classpath路径下的applicationContext.xml及.bean.xml创建AppliContext
BeanFactory_beanFactory=new_ClassPathXmlApplicationContext(new String[]{“ApplicationContext.xml”,”bean.xml”})
Bean的基本行为及应用
Bean在Spring的容器中存在以下两种基本行为:
a) Singleton:单态
b) Non-singleton或prototype:原型
默认为singleton,Spring容器中公存在一个共享的实例.程序每次请求该ID的bean时,Sprin都会返回这个bean的共享实例.可以重复使用. Non-singleton创建及销毁bean的代价较大,应尽量避免bean设置为Non-singleton行为, Non-singleton行为的Bean实例化后,将完全交由使用Bean的程序进行管理,对于Non-singleton行为的bean,由BeanFactory获得后完全等同于new关键字的作用.Spring不会跟踪管理Bean的生命周期的行为;
将bean的行为设置为Non-singleton,则在配置该bean的节点中设置scope=”prototype”