您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Java笔记第27章Spring
一.Spring概述Spring是一个DI和AOP容器的开源框架,为简化企业级应用开发而生。使用Spring可以使得意的JavaBean实现以前只有EJB才能实现的功能。Spring模块:DAO,ORM,JEE,AOP,WEB,这些模块都被装入Spring容器,由Spring统一管理。二.Spring中的Bean配置1.IOC和DIIOC是一种思想,其思想是反转资源获取的方向。传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源。而应用了IOC之后,则是容器该去地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接收资源。这种行为也叫查找的被动形式。DI是IOC思想的一种实现,是一种具体的设计模式。在DI模式里,容器以一些预先定义好的方式(如setter方法)将匹配的资源注入到每个组件里。DI和IOC经常混用。2.在Spring的IOC容器里配置Bean1.setter注入:最流行的DI类型。需要提供setter方法,注入根据Bean节点的属性值。使用property元素,其中name属性映射属性名,value为属性值。2.构造器注入:注入根据配置文件中参数的位置顺序。使用constructor-arg元素3.Spring容器1.在SpringICO容器读取Bean配置创建Bean实例之前,必须对它进行实例化。只有在容器实例化后,才可以从IOC容器里获取Bean实例并使用。实现方式有两种:a)BeanFactory:IOC容器的基本实现。b)ApplicationContext:提供了更多的高级特性。是BeanFactory的子接口。2.实例化接口ApplicationContext:它的实现类有:a)ClassicPathXmlApplicationContext:从classpath下加载配置文件,最常用b)FileSystemXmlApplicationContext:从文件系统中加载配置文件c)XmlWebApplicationContext:只能用于web应用中3.从IOC容器中获取Bean:调用ApplicationContext的getBean()方法4.Bean配置1.指定Bean的引用:为使应用程序的Bean能够相互访问,引用的方法有:a)在Bean配置文件中,通过ref元素为Bean的属性或构造器参数指定对Bean的引用。b)也可以在属性或构造器里再次声明Bean,这样的Bean称为内部Bean。内部Bean声明直接包含在property或constructor-arg元素里,不需要设置任何id或name属性。同时内部Bean不能使用在任何其他地方。也不能被引用。2.继承Bean配置:Spring允许将通用的Bean配置抽象出来,组成一个父Bean。继承这个Bean的Bean称为子Bean。通过bean的parent属性来指定父Bean。c)子Bean从父Bean继承的属性包括Bean的属性和在bean元素里的属性。d)子Bean可以覆盖从父Bean继承过来的配置。e)可以将父Bean作为配置模板,设置bean的abstract属性为true,这样Spring将不会实例化这个Beanf)并不是bean元素里的所有属性都会被继承。比如:autowire,dependency-check,abstract等。g)当子Bean想要覆盖父Bean中的class属性时,父Bean中的abstract属性必须为true。3.4.检查属性:当Bean较多进用来检查属性是否设置成功。h)通过依赖检查来检查属性:依赖检查只适用于setter注入。同时检查所有的属性。在bean的dependentcy-check属性里指定依赖检查模式。i)通过@Required注解检查属性:可以针对个别属性进行检查。需要先注册后置处理器。5.后置处理器1.注册RequiredAnnotationBeanPostProcessor后置处理器a)加入jar包:common-annotations.jar(如使用JavaSE6则不用导入)b)导入context命名空间,同时在配置文件加入如下配置:context:annotation-config/三.Sping的事务操作Spring支持的事务传播行为1.当一个事务的操作牵扯到其它事务操作时。需要将这两个事务放入一个事务中,同时这两个事务也要有自己的事务。这样才能保证当某个事务不能通过时,整个事务同样可以提交。添加这样的事务可以有两种方式:a)使用注解的方式,在@Transactional注解的propagation属性中定义传播行为,默认是REQUIRED,需要设置为REQUIRES_NEW。b)在配置文件中配置事务的属性,在tx:method元素中设定传播事务属性设置事务的隔离级别1.并发事务所导致的问题有以下几种:a)可重复读:当一个线程改变一个值,另一个线程访问这个值时,依旧是之前的那个值。b)不可重复读:与可重复读相反。c)脏读:对于两个事物T1,T2,T1读取了已经被T2更新但还没有被提交的字段.之后,若T2回滚,T1读取的内容就是临时且无效的.脏读危害很大,尽量消除。d)幻读:对于两个事物T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行.之后,如果T1再次读取同一个表,就会多出几行.2.设置隔离事务属性:a)用@Transactional注解声明式地管理事务时可以在@Transactional的isolation属性中设置隔离级别.b)在Spring2.x事务通知中,可以在tx:method元素中指定隔离级别c)Spring支持的事务隔离级别设置事务回滚属性1.默认情况下只有未检查异常(RuntimeException和Error类型的异常)会导致事务回滚.而受检查异常不会.2.事务的回滚规则可以通过@Transactional注解的rollbackFor和noRollbackFor属性来定义.这两个属性被声明为Class[]类型的,因此可以为这两个属性指定多个异常类.a)rollbackFor:遇到时必须进行回滚b)noRollbackFor:一组异常类,遇到时必须不回滚3.在Spring2.x事务通知中,可以在tx:method元素中指定回滚规则.如果有不止一种异常,用逗号分隔.设置超时和只读事务属性1.由于事务可以在行和表上获得锁,因此长事务会占用资源,并对整体性能产生影响.2.如果一个事物只读取数据但不做修改,数据库引擎可以对这个事务进行优化.3.超时事务属性:事务在强制回滚之前可以保持多久.这样可以防止长期运行的事务占用资源.4.只读事务属性:表示这个事务只读取数据但不更新数据,这样可以帮助数据库引擎优化事务.5.超时和只读属性可以在@Transactional注解中定义.超时属性以秒为单位来计算.6.在Spring2.x事务通知中,超时和只读属性可以在tx:method元素中进行指定.四.Spring整合Hibernate1.简介1.Spring支持大多数流行的ORM框架,包括HibernateJDO,TopLink,Ibatis和JPA。2.Spring对这些ORM框架的支持是一致的,因此可以把和Hibernate整合技术应用到其他ORM框架上.3.Spring2.0同时支持Hibernate2.x和3.x.但Spring2.5只支持Hibernate3.1或更高版本4.需要加入Hibernate相关包和配置文件a)Spring配置文件中配置:数据源,支持注解的事务管理器,配置对hibernate配置文件的引用,SessionFactory,5.也可完全使用String的配置文件,不使用Hibernate的2.在Spring在配置SessionFactory对于Hibernate而言,必须从原生的HibernateAPI中构建SessionFactory.此外,应用程序也无法利用Spring提供的数据存储机制(例如:Spring的事务管理机制)。Spring提供了对应的工厂Bean,可以用单实例的形式在IOC容器中创建SessionFactory实例.1.方式1:a)可以利用LocalSessionFactoryBean工厂Bean,声明一个使用XML映射文件的SessionFactory实例.b)需要为该工厂Bean指定configLocation属性来加载Hibernate配置文件2.方式2:a)如果在SpringIOC容器中配置数据源.可以将该数据源注入到LocalSessionFactoryBean的dataSource属性中.该属性可以指定的数据源会覆盖掉Hibernate配置文件里的数据库配置.3.方式3:a)可以将所有配置合并到LocalSessionFactoryBean中,从而忽略Hibernate配置文件.b)可以在LocalSessionFactoryBean的mappingResources属性中指定XML映射文件的位置.该属性为String[]类型.因此可以指定一组映射文件.c)在hibernateProperties属性中指定数据库方言等.4.用Spring的ORM模板持久化对象1.在单独使用ORM框架时,必须为每个DAO操作重复某些常规任务.例如:打开关闭Session对象;启动,提交,回滚事务等.2.同JDBC一样,Spring采取了相同的方法------定义模板类和DAO支持类来简化ORM框架的使用.而且Spring在不同的事务管理API之上定义了一个事务抽象层.对于不同的ORM框架,只需要选择相应的事务管理器实现.4.Spring对不同数据存储策略的支持类HibernateTemplate确保了Hibernate会话能够正确地打开和关闭.HibernateTemplate也会让原生的Hibernate事务参与到Spring的事务管理体系中来.从而利用Spring的声明式事务管理事务.5.使用Hibernate模板HibernateTemplate中的模板方法管理会话和事务.如果在一个支持事务的DAO方法中有多个Hibernate操作,模板方法可以确保它们会在同一个会话和事务中运行.因此没有必要为了会话和事务管理去和HibernateAPI打交道.通过为DAO方法添加@Transactional注解将其声明为受事务管理的.HibernateTemplate类是线程安全的,因此可以在Bean配置文件中只声明一个实例,并将该实例注入到所有的HibernateDAO中.五.Spring整合Struts1步骤1.Struts1相关操作a)加入Struts和Spring相关包,重复的logging包取版本较高的那个。加入配置文件:WEB-INF中的web.xml,classpath中的struts-config.xml,MessageResources.propertiesb)创建UserAction类,execute方法,并在struts-config.xml文件中配置c)web.xml文件配置i.web.xml文件中应指出Spring配置文件的位置d)struts-config.xml配置i.2.Spring相关操作a)加入spring-webmvc-struts.jar包b)加入ApplicationContext.xml配置文件c)UserAction交由Spring来创建,在配置文件中声明d)Struts配置文件中的action节点应该指向IOC容器中的bean,bean中的id属性改为name,name的值为action节点的name值。e)在通用的web应用中访问Spring过程:通过注册Servlet监听器ContextLoaderListener,Web应用程序可以加载Spring的ApplicationContext对象.这个监听器会将加载好的ApplicationContext
本文标题:Java笔记第27章Spring
链接地址:https://www.777doc.com/doc-2878905 .html