




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring(2.5)1.基础Spring是一个开源的控制反转(IOC)和面向切面(AOP)的容器框架。1.1控制反转(IOC)BookDao bookdao=new BookDaoImpl();BookDaoImpl是由应用维护和创建的。所谓控制反转就是应用本身并不负责对象的创建及维护,而是由外部容器负责。这样控制权就由应用转移到了外部容器,即所谓的反转。1.2依赖注入 所谓依赖注入,就是在运行期间,由外部容器动态的将依赖对象注入到组件中去。 Public class BookServiceBeanPrivate BookDao bookdao;/通过构造器参数,让容器把创建好的对象注入进BookDaoBean,当然也可以用set方法进行注入;Public BookServiceBean(BookDao bookdao)This.bookdao=bookdao; Public void save(Book book)bookdao.save(book)1.3为何使用spring 降低组件之间的耦合度,实现各层之间的解耦 提供众多服务,如:事务管理、消息服务、JMS服务、持久化服务等 提供单例模式支持 提供了AOP技术,利用它很容易实现权限拦截、运行期监控等功能 提供众多辅助类,加速开发,如:JdbcTemplate、HibernateTemplate 对于主流的应用框架提供了支持,如struts、hibernate、JPA等1.4环境搭建所需jar包配置文件模板实例化spring容器 关闭spring容器:ctx.close()Spring的XML配置文件代码自动提示说明 id、name都是给bean取名字;id不能包含特殊字符,name可以。 class,指定bean指向的具体类。 init-method:初始化创基bean实例时就调用的bean的方法 destroy-method:销毁bean实例前调用的bean的方法(在销毁前关闭资源) 获取bean实例,通过ApplicationContext的getBean(String id)方法获取bean实例2.Spring管理bean2.1.实例化bean的3种方式2.2.Bean的作用域及延迟初始化默认情况下spring创建对象是单例的,即多次getBean方法得到的是同一个Bean实例,默认的作用域为singleton(默认scope=” singleton”)。2.3.Bean的生命周期 singleton范围的bean在spring容器(ApplicationContext)实例化时,就会被实例化。即的lazy-init的默认值为default。将lazy-init的值改为true时,就会在在调用genBean方法时,才实例化的。 prototype范围的bean是在调用genBean方法时,才实例化的。 init-method:初始化创建bean时就调用的bean的方法 destroy-method:销毁bean实例前调用的bean的方法(在销毁前关闭资源)2.4依赖注入的原理注入依赖对象(1)方式一:通过set方法Service中注入dao对象。上图中,标签的ref指向service中要注入的bean的名称(bean的id、name),name指向service类中要注入的dao属性的名称;(2)方式二:通过内部bean标签的,name指向service类中要注入的dao属性的名称;如果使用内部bean,则该bean只能为外部bean服务。其他bean不能使用。(3)方式三:通过构造器方式在标签中,index指的是构造器参数的索引,type指的是构造器参数指向的bean类,ref指的是参数指向的具体bean;如果参数为字符串,则没有type和ref,value指注入的字符串参数的值。(4)注解方式 见注解注入基本类型 name属性要有get、set方法。注入集合类型(集合中元素为字符串)2.5手工装配-自动装配手动装配,如上面的xml依赖注入和下面注解中的Resource和Autowired依赖注入。建议开发中使用手动装配。 自动装配,在xml中的标签中配置。不推荐使用。3.注解3.1依赖注入3.2自动扫描bean组件 如果项目中的bean很多,xml就会显得臃肿。可以通过自动扫描来给xml减肥。 这些注解是在类上的,不是在接口上的。 bean默认名称。生成的bean的名称默认为bean类简单类名的首字母小写。 指定生成的bean实例的名称。如Service(“personservice”),Repository(“persondao”) 指定bean的作用域。上面的注解创建的bean是单例的。注解Scope(“prototype”),可以改变bean的作用域,每次创建新的bean实例。 指定bean初始化方法(生成bean时自动调用)在方法上PostConstruct。 指定bean销毁前的处理方法在方法上Predestroy 上面的标签会注册很多处理器;使用它后,就不必使用了3.3动态代理AOP在JDK中,实现动态代理:代理对象和目标对象都实现了共同的接口,会使用Proxy类产生代理对象。Spring缺省使用J2SE 动态代理(dynamic proxies)来作为AOP的代理。这样任何接口都可以被代理。Spring也支持使用CGLIB代理. 对于需要代理类而不是代理接口的时候CGLIB代理是很有必要的。 如果一个业务对象并没有实现一个接口,默认就会使用CGLIB。 此外,面向接口编程 也是一个最佳实践,业务对象通常都会实现一个或多个接口。代理拦截方法的执行顺序基于注解 Pointcut,第一个*号表示任意的返回值类型,service.表示该包及其子包,第二个*表示类,第三个*表示类中的方法,(.)表示方法的参数个数任意;注解表示拦截方法,即anyMethod代理了实际的方法。 Before,在所有拦截到的方法执行之前执行;agrs该前置通知拦截的方法还必须满足相应的参数类型和个数;否则不执行前置通知 AfterReturning,在所有拦截到的方法执行之后执行;returing表示该后置通知拦截的方法还必须满足相应的返回值类型,并且会将返回值作为后置通知方法的参数。 After,在后置通知后执行;最后执行,并且只要满足条件就一定会执行。 AfterThrowing,例外通知,throwing指该例外通知拦截的方法还必须满足:抛出的例外类型、个数与throwing指定的相同,并将例外作为该例外通知的参数。实例基于XML实例切入点表达式 拦截service包及其子包下所有类的方法execution(* cn.itcast.service.*.*(.) 拦截返回值为String类型的方法execution(java.lang.String cn.itcast.service.*.*(.) 拦截第一个参数为String类型的方法execution(* cn.itcast.service.*.*( java.lang.String,.) 拦截所有返回值不是void类型的方法execution(!void cn.itcast.service.*.*(.)4.整合JDBC4.1基本步骤配置数据源配置事务 引入命名空间 注解方式 XML方式 实例在service层引入数据源- 向service层注入数据源-向service层引入jdbcTemplate类-4.2封装数据库配置到properties文件实质是在spring配置文件中使用占位符。 编写perties文件 引入配置文件注意location指定的路径,这里默认为类路径4.3事务管理 开启事务 Spring默认会为每个数据库操作方法开启事务(在类上使用Transactional)。可以通过Transaction来改变。 回滚 Spring中事务对运行时异常(unchecked)才会回滚,对编译时异常(checked)不会回滚。例如对RuntimeException会回滚,对Exception不会(Exception是RuntimeException的父类,包含checked和unchecked)。这种特性可以改变:上述注解指定某种编译异常(checked)回滚。当然也可以指定运行时异常不会滚:传播行为 实例指定该方法不开启事务。 NESTED属性介绍-xxx方法默认开启事务。注解方式(建议,可以精细配置) 在类上 Transactional,指明该类需要事务管理 Transactional(readOnly),该事务指定的方法为只读方法;、 Transactional(timeput),事务的超时时间 Transactional(isolation),事务的隔离级别XML方式(不推荐)对标签:get*。表示如果拦截的方法以get开头,则不启用事务。*。表示拦截的方法使用默认的事务管理,即开启事务。5.整合Hibernate5.1引入jar包5.2配置数据源5.3将sessionFacory交给Spring5.4配置事务管理注解方式5.4配置实体bean的xx.hbm.xml5.5测试15.6二级缓存引入ehcache.jar对指定类使用缓存。引入ehcache.xml,放在类路径下。6.整合Hibernate+struts1第一版Hibernate如上,已整合。6.1引入jar包6.2web容器中实例化spring容器ContextLoaderListener实例化spring容器后,会将容器实例放到ServletContest实例中,可以通过ServletContext对象获取到spring容器的实例。(了解)6.3web容器中配置struts6.4 配置struts-config.xml6.5获取spring容器实例6.6编写action类7.整合Hibernate+struts1第二版7.1将action交给spring管理7.2实例确保action的path和上述相应bean的名称相同,如果action的path值中有特殊字符,则bean中用name属性(id不能包含特殊字符)注意:上述的action不需要指定type(具体类),这时对于相应的请求会有spring创建action实例;如果指定了type,则在spring找不到action对应的bean时,会有struts根据type指定的类创建action实例。8.解决整合struts1乱码问题8.1.spring解决struts1乱码问题 在web.xml中加入下面配置:9.hibernate延迟加载例外9.1因session关闭导致的延迟加载例外在web.xml中加入如下配置:10.整合JPA10.1引入jar10.2配置spring容器(不建议)10.3引入persistence.xml文件10.4实例10.5其他方式整合JPA配置 从JNDI中获取:用于从Java EE服务器中获取指定的EntityManagerFactory,这种方式在Spring事务管理时一般要使用JTA事务管理。 Spring中的配置: 在标准的Java EE 5启动过程中,Java EE服务器自动检测持久化单元(例如应用程序文件包中的META-INF/persistence.xml) ,以及Java EE部署描述符中定义给那些持久化单元命名上下文位置的环境的persistence-unit-ref项(例如web.xml)。在这种情况下,整个持久化单元部署,包括持久化类的织入(字码码转换)都取决于Java EE服务器。 JDBC DataSource 通过在META-INF/persistence.xml 文件中的JNDI位置进行定义;EntityManager事务与服务器的JTA子系统整合。Spring仅仅用获得的 EntityManagerFactory, 通过依赖注入将它传递给应用程序对象,并为它管理事务(一般通过JtaTransactionManager)。注意,如果在同一个应用程序中使用了多个持久化单元,JNDI获取的这种持久化单元的bean名称 应该与应用程序用来引用它们的持久化单元名称相符(例如PersistenceUnit和 PersistenceContext注解)。 LocalContainerEntityManagerFactoryBean适用于所有环境的FactoryBean,能全面控制EntityManagerFactory配置,非常适合那种需要细粒度定制的环境。该bean有以下属性:persistenceUnitManager:用于获取JPA持久化单元,默认实现DefaultPersistenceUnitManager用于解决多配置文件情况。dataSource:用于指定Spring定义的数据源。persistenceXmlLocation:用于指定JPA配置文件,对于多JPA配置文件情况请选择设置persistenceUnitManager属性来解决。persistenceUnitName:用于指定持久化单元名称。persistenceProvider:用于指定持久化实现厂商类,如hibernate为:org.hibernate.ejb.HibernateProvider 类。jpaVendorAdapter:用于设置JPA实现厂商的特定属性,如设置hibernate的是否自动生成DDL的属性generateDdl,这些属性是厂商特定的,因此最好在这里设置。目前spring提供HibernateJpaVendorAdapter,OpenJpaVendorAdapter,EclipseJpaVendorAdapter,TopLinkJpaVenderAdapter四个实现。其中最主要的属性是“database”,用来指定使用的数据库类型。从而根据数据库类型决定如何将数据库特定异常转换为Spring一致性异常。目前支持以下数据库:DB2,DERBY,H2,HSQL,INFORMIX,MYSQL,ORACLE,POSTGRESQL,SQL_SERVER,SYBASEjpaDialect:用于指定一些高级特性,如事务管理等。目前Spring提供HibernateJpaDialect,OpenJpaDialect,EclipseJpaDialect,TopLinkJpaDialect和DefaultJpaDialect实现。注意DefaultJpaDialect不提供任何功能,因此在使用特定实现厂商的JPA实现时需要指定jpaDialect实现,如使用hibernate就使用HibernateJpaDialect。当指定jpaVendorAdapter属性时可以不指定jpaDialect,会自动设置相应的JpaDialect实现;jpaProperties和jpaPropertyMap:指定JPA属性;如Hibernate中指定是否显示SQL的“hibernate.show_sql”属性,对于jpaProperties设置的属性自动会放进jpaPropertyMap中;loadTimeWeaver:用于指定LoadTimeWeaver实现,从而允许JPA 加载时修改相应的类文件。具体使用得参考相应的JPA规范实现厂商文档,如Hibernate就不需要指定loadTimeWeaverJPA配置实例: persistence.xml: persistence.xml中,指定持久化单元名称和事务类型,其他在Spring中配置。 applicationContext.xml true LocalContainerEntityManagerFactoryBean:指定使用本地容器管理EntityManagerFactory,从而进行细粒度控制; dataSource属性指定使用Spring定义的数据源; persistenceXmlLocation指定JPA配置文件为chapter8/persistence.xml,且该配置文件非常简单,具体配置完全在Spring中进行; persistenceUnitName指定持久化单元名字,即JPA配置文件中指定的; persistenceProvider:指定JPA持久化提供商,此处使用Hibernate实现HibernatePersistence类; jpaVendorAdapter:指定实现厂商专用特性,即generateDdl= false表示不自动生成DDL,database= HSQL表示使用hsqldb数据库; jpaDialect:如果指定jpaVendorAdapter此属性可选,此处为HibernateJpaDialect; jpaProperties:此处指定“hibernate.show_sql =true”表示在日志系统debug级别下将打印所有生成的SQL。11.整合JPA+struts111.1引入jar11.2web中实例化spring容器 web.xml中加入如下配置:ContextLoaderListener实例化spring容器后,会将容器实例放到ServletContest实例中,可以通过ServletContext对象获取到spring容器的实例。(了解)11.3在web容器中配置struts11.4 配置struts-config.xml 这里将action直接交给spring管理。11.5配置spring容器11.6实例12.解决整合JPA延迟加载例外13.整合Hibernate+struts213.1引入jar14.整合Quartz(JobDetailBean方式)14.1.Spring创建JobDetail的两种方式 定时任务两种方式,Spring很好的封装使用Quartz的细节,第一种方式是利用SPring封装的Quartz类进行特定方法的实现,第二种是通过透明的使用Quartz达到定时任务开发的目的,总体说第二种对开发人员更方便! 配置Spring的任务调度抽象层简化了任务调度,在Quartz的基础上提供了更好的调度对象。Spring使用Quartz框架来完成任务调度,创建Quartz的作业Bean(JobDetail),有一下两种方法:1:利用JobDetailBean包装QuartzJobBean子类(即Job类)的实例。2:利用MethodInvokingJobDetailFactoryBean工厂Bean包装普通的Java对象(即Job类)。1:采用第一种方法创建job类,一定要继承QuartzJobBean ,实现 executeInternal(JobExecutionContextjobexecutioncontext)方法,此方法就是被调度任务的执行体,然后将此Job类的实例直接配置到JobDetailBean中即可。这种方法和在普通的Quartz编程中是一样的。2:采用第二种方法 创建Job类,无须继承父类,直接配置MethodInvokingJobDetailFactoryBean即可。但需要指定一下两个属性: targetObject:指定包含任务执行体的Bean实例。targetMethod:指定将指定Bean实例的该方法包装成任务的执行体。concurrent:是否并发执行,对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。MethodInvokingJobDetailFactoryBean类默认是并发执行的,这时候如果不设置“concurrent”为false,很可能带来并发或者死锁的问题,而且几率较小,不容易复现,请大家使用的时候注意设置“concurrent”14.2整合方式一示例步骤 1、将spring核心jar包、quartz.jar和Spring-context-support-3.2.0.jar导入类路径。 2、编写Job类PunchJob(该类必须继承QuartzJobBean)packageorg.crazyit.hrsystem.schedule;importjava.util.Date;importorg.springframework.scheduling.quartz.QuartzJobBean;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importorg.crazyit.hrsystem.service.EmpManager;publicclassPunchJobextendsQuartzJobBean/判断作业是否执行的旗标privatebooleanisRunning=false;/该作业类所依赖的业务逻辑组件privateEmpManagerempMgr;publicvoidsetEmpMgr(EmpManagerempMgr)this.empMgr=empMgr;/定义任务执行体publicvoidexecuteInternal(JobExecutionContextctx)throwsJobExecutionExceptionif(!isRunning)System.out.println(开始调度自动打卡);isRunning=true;/调用业务逻辑方法empMgr.autoPunch();isRunning=false; 3、编写quartz.xml配置文件!-定义一个业务逻组件,继承业务逻辑组件的模板-!-两者都可以用-job data map(jobDataAsMap)可通过JobExecutionContext (执行时传递)获取。JobDetailBean将 job data map的属性映射到job的属性。如例所示,如果job类PunchJob中包含一个empMgr属性,JobDetailBean将自动注入到Job类PunchJob的实例中,可用于传递参数。如果不写明,就会报java.lang.NullPointerException错误,主要是因为没有注入Bean。 在上面的配置中我们是让触发器和任务嵌套的,其实还可以将他们分离,形如: com.gresoft.fileupload.service.ParseFileQuartz !- 两者都可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年攀枝花市盐边县事业单位春季引才考核的考前自测高频考点模拟试题及答案详解(夺冠)
- 2025年上海大学公开招聘岗位(第二批)模拟试卷完整参考答案详解
- 2025届山东济南城建集团有限公司春季招聘24名笔试题库历年考点版附带答案详解
- 2025年芜湖安徽工程大学高层次人才招聘60人模拟试卷及完整答案详解一套
- 2025广东省农业科学院设施农业研究所招聘劳动合同制人员1人模拟试卷有答案详解
- 2025安徽“合肥工科同道产业园管理有限公司部分岗位外包服务”招聘4人笔试题库历年考点版附带答案详解
- 2025湖北十堰市城市发展控股集团有限公司及所属子公司招聘拟聘用人员模拟试卷含答案详解
- 2025海南保亭农水投资有限公司第二次招聘7人(代农水投公司发布)模拟试卷附答案详解(典型题)
- 2025广西南宁市博物馆招聘编外人员3人模拟试卷及参考答案详解
- 2025人民日报社山西分社公开招聘工作人员1人笔试题库历年考点版附带答案详解
- 2025年CIA考试题库(附答案)
- 2025年招录考试-法院书记员考试历年参考题库含答案解析(5套典型题)
- 2025关于销售人员的劳动合同样本
- 精神科护理科普:理解与关爱慢性精神疾病患者
- 法律与道德小学生课件
- vivo公司管理制度
- DB31/T 804-2014生活饮用水卫生管理规范
- 儿童早期矫正教学课件
- 银行代销业务管理制度
- 运动素质知到课后答案智慧树章节测试答案2025年春浙江大学
- 招聘话术培训
评论
0/150
提交评论