版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程内容1. 面向接口(抽象)编程的概念与好处2. IOC/DI的概念与好处a) inversion of controlb) dependency injection3. AOP的概念与好处4. Spring简介5. Spring应用IOC/DI(重要)a) xmlb) annotation6. Spring应用AOP(重要)a) xmlb) annotation7. Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)a) opensessionInviewfilter(记住,解决什么问题,怎么解决)8. Spring JDBC面向接口编程(面向
2、抽象编程)1. 场景:用户添加2. Spring_0100_AbstractOrientedProgramminga) 不是AOP:Aspect Oriented Programming3. 好处:灵活什么是IOC(DI),有什么好处1. 把自己new的东西改为由容器提供a) 初始化具体值b) 装配2. 好处:灵活装配Spring简介1. 项目名称:Spring_0200_IOC_Introduction2. 环境搭建a) 只用IOCi. spring.jar , jarkata-commons/commons-loggin.jar3. IOC容器a) 实例化具体beanb) 动态装配4. A
3、OP支持a) 安全检查b) 管理transactionSpring IOC配置与应用1. FAQ:不给提示:a) window preferences myeclipse xml xml catalogb) User Specified Entries addi. Location:D:share0900_Springsoftspring-framework-2.5.6distresourcesspring-beans-2.5.xsdii. URI: file:/D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/sp
4、ring-beans-2.5.xsdiii. Key Type:Schema Locationiv. Key:/schema/beans/spring-beans-2.5.xsd2. 注入类型c) Spring_0300_IOC_Injection_Typed) setter(重要)e) 构造方法(可以忘记)f) 接口注入(可以忘记)2. id vs. namea) Spring_0400_IOC_Id_Nameb) Idname都行c) name可以用特殊字符 !- - 3. 简单属性的注入a) Spring_0500_IOC_Sim
5、plePropertyb) 4. bean 中的scope属性 RequestSessionGlobalSession只有Spring和Web Framework结合时才会起作用,比如Spring和Struts结合时才配,但是很少配、a) Spring_0600_IOC_Bean_Scopeb) singleton 单例(默认为Singleton) 在每个Sprign IOC容器中一个Bean定义对应一个对象实例c) proptotype 每次创建新的对象5. 集合注入a) Spring_0700_IOC_Collectionsb) 很少用,不重要!参考程序6. 自动装配a) Spring_0
6、800_IOC_AutoWireb) byName 根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如UserService里面有userDAO1属性,在装配时就会查找与userDAO1属性相同的Bean,即 ,所以当System.out.println(service.getUserDAO1()时,结果为daoId=1。c)、byType 如果容器中存在一个与指定类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType类型自动装配。 byType时,如果按照上面的形式写,将出错,
7、因为userDAO1和userDAO2类型一样。d)、constructor (了解): 与ByType方式类似,不同之处在于它应用于构造器参数,如果在容器中没有找到与构造器参数类型一致的bean,那么将抛出异常、 e) :autodetect(了解):通过bean的自省机制来决定使用Constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式d)、如果所有的bean都用同一种,可以使用beans的属性:default-autowire7. 生命周期a) Spring_0900_IOC_Life_Cycleb) lazy-init (不重要) 如果不
8、加 lazy-init=”true”,只要容器一初始化,也就是ClassPathXmlApplicationContext 一new出来,bean里面的所有class都会初始化、加上之后如果Context初始化,class就不会初始化,而是用到时初始化、c) init-method destroy-methd 不要和prototype一起用(了解)8. Annotation第一步:a) 修改xml文件,参考文档9. Autowireda) 默认按类型by typeb) 如果想用byName,使用Qulifierc) 写在private field(第三种注入形式)(不建议,破坏封装)d) 如果
9、写在set上,qualifier需要写在参数上10. Resource(重要)a) 加入:j2ee/common-annotations.jarb) 默认按名称,名称找不到,按类型c) 可以指定特定名称d) 推荐使用e) 不足:如果没有源码,就无法运用annotation,只能使用xml11. Component Service Controller Repositorya) 初始化的名字默认为类名首字母小写b) 可以指定初始化bean的名字12. Scope13. PostConstruct = init-method; PreDestroy = destroy-method;什么是AOP1
10、. 面向切面编程Aspect-Oriented-Programminga) 是对面向对象的思维方式的有力补充2. Spring_1400_AOP_Introduction3. 好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码a) Filterb) Struts2的interceptor4. 概念:a) JoinPoint 释意:切面与原方法交接点 即 切入点b) PointCut 释意:切入点集合c) Aspect(切面)释意:可理解为代理类前说明d) Advice 释意:可理解为代理方法前说明 例如BeforeAfter加在切入点上的建议e) Target 释意:被代理对象 被
11、织入对象f) Weave 释意:织入Spring AOP配置与应用1. 两种方式:a) 使用Annotationb) 使用xml2. Annotationa) 加上对应的xsd文件spring-aop.xsdb) beans.xml 需要在头部加 xmlns:aop=/schema/aop 以及xsi:schemaLocation= /schema/aop /schema/aop/spring-aop-2.5.xsd还需要
12、在Preferences -xml Catalog引入spring-aop-2.5.xsd(E:Java FilesSpringJarspring-framework-2.5.6distresources)c) 此时就可以解析对应的Annotation了d) 建立我们的拦截类e) 用Aspect注解这个类 AspectComponentpublic class LogInterceptor Pointcut(execution(public * com.bjsxt.service.*.add(.)public void myMethod(); Before(myMethod()(在指定方法执行
13、之前执行的方法)public void before() System.out.println(method before);Around(myMethod()public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable System.out.println(method around start);ceed();System.out.println(method around end);f) 建立处理方法g) 用Before来注解方法h) 写明白切入点(execution .)i) 让spring对我们的拦
14、截器类进行管理Component3. 常见的Annotation:a) Pointcut 切入点声明 以供其他方法使用 , 例子如下:AspectComponentpublic class LogInterceptor Pointcut(execution(public * com.bjsxt.dao.*.*(.)public void myMethod()Around(myMethod()public void before(ProceedingJoinPoint pjp) throws ThrowableSystem.out.println(method before);ce
15、ed();AfterReturning(myMethod()public void afterReturning() throws ThrowableSystem.out.println(method afterReturning);After(myMethod()public void afterFinily() throws ThrowableSystem.out.println(method end);b) Before 发放执行之前织入c) AfterReturning 方法正常执行完返回之后织入(无异常)d) AfterThrowing 方法抛出异常后织入e) After 类似异常的
16、finally f) Around 环绕 类似filter , 如需继续往下执行则需要像filter中执行FilterChain.doFilter(.)对象一样 执行 ProceedingJoinPceed()方可,例子如下:Around(execution(* com.bjsxt.dao.*.*(.)public void before(ProceedingJoinPoint pjp) throws ThrowableSystem.out.println(method start);ceed();/类似FilterChain.doFilter(.)告诉jvm继续
17、向下执行4. 织入点语法a) void !voidb) 参考文档(* .)如果 execution(* com.bjsxt.dao.*.*(.)中声明的方法不是接口实现 则无法使用AOP实现动态代理,此时可引入包” cglib-nodep-2.1_3.jar” 后有spring自动将普通类在jvm中编译为接口实现类,从而打到可正常使用AOP的目的.5. xml配置AOPa) 把interceptor对象初始化b) aop:configi. aop:aspect .1. aop:pointcut2. aop:before例子:动态代理:Proxy和INvocationHandler的使用Spri
18、ng整合Hibernate1. Spring 指定datasourcea) 参考文档,找dbcp.BasicDataSourcei. c3p0ii. Dbcpiii. Spring 里面的commons-dbcp.jar和commons-pool.jar classpath:com/foo/perties iv. proxoolb) 在DAO或者Service中注入dataSourcec) 在Spring中可以使用PropertyPlaceHolderConfigure来读取Properties文件的内容2. Spring整合Hibernatea) i. property da
19、taSourceii. annotatedClassesclasspath:pertiescom.bjsxt.model.Usercom.bjsxt.model.Logorg.hibernate.dialect.MySQLDialecttrueiii. b) 引入hibernate 系列jar包c) User上加Annotationd) UserDAO或者UserServie 注入SessionFactorye) jar包问题一个一个解决3. 声明式的事务管理a) 事务加在DAO层还是Service层?b) annotationi. 加入annotation.xsdii. 加入
20、txManager beaniii. iv. 须在Xml文件头里加上xsi:schemaLocation= /schema/tx /schema/tx/spring-tx-2.5.xsdv.例如: vi. 在需要事务的方法上加:Transactional,会自动在前后加上关于事务的业务逻辑,开始时就是BeganTransaction(),结尾时是Transaction Commit().如果捕捉到任何的异常,就会自动Rollback(),如果是runTime异常,会自动回滚。vi
21、i. 需要注意,Hibernate获得session时要使用SessionFactory.getCurrentSession 不能使用OpenSessionc) Transactional详解i. 什么时候rollback 1. 运行期异常,非运行期异常不会触发rollback2. 必须uncheck (没有catch)3. 不管什么异常,只要你catch了,spring就会放弃管理4. 事务传播特性:propagation_required例如: Transactional(propagation=Propagation.REQUIRED)等同于(Transactional)作用,一个方法声
22、明了Transactional事务后,其内再调用的方法不需要再声明Transactional.5. read_only例如: Transactional(propagation=Propagation.REQUIRED,readOnly=true)当方法声明readOnly=true时,该方法及其调用的方法内都不执行insert update等d) xml(推荐,可以同时配置好多方法)i. bean txmanagerii. aop:config 1. aop:pointcut2. aop:advisor pointcut-ref advice-refiii. tx:advice: id tr
23、ansaction-manager = iv. 可定义扫描目标包下所有实体类例如: org.hibernate.dialect.OracleDialecttrue !- com.bjsxt.model.TestUser com.bjsxt.model.Log - com.bjsxt.model e) HibernateTemplate、HibernateCallback、HibernateDaoSupport(不重要)介绍i. 设计模式:Template Method(模板方法)ii. Callback:回调/钩子函数iii. 第一种:(建议)1. 在spring中初始化HibernateTe
24、mplate,注入sessionFactory2. DAO里注入HibernateTemplateprivate HibernateTemplate hibernateTemplate;Resourcepublic void setHibernateTemplate(HibernateTemplate hibernateTemplate) this.hibernateTemplate = hibernateTemplate;3. save写getHibernateTemplate.save();public void save(TestUser testUser) hibernateTempl
25、ate.save(testUser);iv. 第二种:1. 从HibernateDaoSupport继承(此方法不好用 可忽略)2. 必须写在xml文件中,无法使用Annotation,因为set方法在父类中,而且是final的例如:首先,新建SuperDAOImpl类(使用Annotation注入-Component):Componentpublic class SuperDAOImpl private HibernateTemplate hibernateTemplate; /此处定义由spring注入管理public HibernateTemplate getHibernateTempl
26、ate() return hibernateTemplate;Resourcepublic void setHibernateTemplate(HibernateTemplate hibernateTemplate) this.hibernateTemplate = hibernateTemplate;此时,xml中必须要有:或者,SuperDAOImpl类写成下面代码:Componentpublic class SuperDAOImpl extends HibernateDaoSupport Resource(name=sessionFactory)public void setSuperH
27、ibernateTemplate(SessionFactory sessionFactory) super.setSessionFactory(sessionFactory);对应的xml中则可省略bean id=hibernateTemplate部分只要包含bean id=sessionFactory.部分即可最后,其他类继承SuperDaoImpl类后便可直接使用HibernateTemplateComponent(u)public class UserDAOImpl extends SuperDAOImpl implements UserDAO public void save(Test
28、User testUser) this.getHibernateTemplate().save(testUser);f) spring整合hibernate的时候使用packagesToScan属性,可以让spring自动扫描对应包下面的实体类Struts2.1.6 + Spring2.5.6 + Hibernate3.3.21. 需要的jar包列表jar包名称所在位置说明antlr-2.7.6.jarhibernate/lib/required解析HQLaspectjrtspring/lib/aspectjAOPaspectjweaver.AOPcglib-nodep-2.1_3.jarsp
29、ring/lib/cglib代理,二进制增强common-annotations.jarspring/lib/j2eeResourcecommons-collections-3.1.jarhibernate/lib/required集合框架commons-fileupload-1.2.1.jarstruts/libstrutscommons-io-1.3.2struts/libstrutscommons-logging-1.1.1单独下载,删除1.0.4(struts/lib)strutsspringdom4j-1.6.1.jarhibernate/required解析xmlejb3-pers
30、istencehibernate-annotation/libEntityfreemarker-2.3.13struts/libstrutshibernate3.jarhibernatehibernate-annotationshibernate-annotation/hibernate-common-annotationshibernate-annotation/libjavassist-3.9.0.GA.jarhiberante/lib/requiredhibernatejta-1.1.jar.hibernate transactionjunit4.5mysql-ognl-2.6.11.j
31、arstruts/libslf4j-api-1.5.8.jarhibernate/lib/requiredhibernate-logslf4j-nop-1.5.8.jarhibernate/lib/requiredspring.jarspring/diststruts2-core-2.1.6.jarstruts/libxwork-2.1.2.jarstruts/libstruts2commons-dbcpspring/lib/jarkata-commonscommons-pool.jar.struts2-spring-plugin-2.1.6.jarstruts/lib2. BestPract
32、ice:a) 将这些所有的jar包保存到一个位置,使用的时候直接copy3. 步骤a) 加入jar包b) 首先整合Spring + Hibernatei. 建立对应的package1. dao / dao.impl / model / service / service.impl/ testii. 建立对应的接口与类框架1. S2SH_01iii. 建立spring的配置文件(建议自己保留一份经常使用的配置文件,以后用到的时候直接copy改)iv. 建立数据库v. 加入Hibernate注解1. 在实体类上加相应注解Entity Id等在字段属性的get方法上加-Column(name = 表
33、字段名)2. 在beans配置文件配置对应的实体类,使之受管vi. 写dao service的实现vii. 加入Spring注解1. 在对应Service及DAO实现中加入Component,让spring对其初始化2. 在Service上加入Transactional或者使用xml方式(此处建议后者,因为更简单)3. 在DAO中注入sessionFactory4. 在Service中注入DAO5. 写DAO与Service的实现viii. 写测试c) 整合Struts2i. 结合点:Struts2的Action由Spring产生ii. 步骤:1. 修改web.xml加入 struts的fil
34、ter如下:struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterstruts2/*2. 再加入spring的listener,这样的话,webapp一旦启动,spring容器就初始化了如下:org.springframework.web.context.ContextLoaderListenercontextConfigLocationclasspath*:spring/*applicationContext.xml3. 规划struts的action和jsp展现4. 加入struts.xmla
35、) 修改配置,由spring替代struts产生Action对象5. 修改action配置a) 把类名改为bean对象的名称,这个时候就可以使用首字母小写了b) Scope(“prototype”)不要忘记iii. struts的读常量:1. struts-default.xml 2. struts-plugin.xml3. struts.xml4. perties5. web.xmliv. 中文问题:1. Struts2.1.8已经修正,只需要改i18n.encoding = gbk2. 使用spring的characterencoding例:CharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncodingtrue3. 需要严格注意filter的顺序4. 需要加到Struts2的filt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钼铁冶炼工成果强化考核试卷含答案
- 2025年助理医师资格证考试之口腔助理医师通关试题库(有答案)
- 2023年全球市场超宽隔膜分切机 GIR3480中文总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 复合型网布贴合过滤棉行业深度研究报告
- 中国指纹辨识锁项目投资可行性研究报告
- 第21课 人民英雄永垂不朽-瞻仰首都人民英雄纪念碑 第2课时 公开课一等奖创新教学设计-【课堂无忧】新课标同步核心素养课堂
- 3-溴丙酸乙酯行业深度研究报告
- 灯头灯座插座行业深度研究报告
- 中国片状谐振器项目投资可行性研究报告
- 中国胶木螺丝项目投资可行性研究报告
- 质量管理案例实施全过程解析
- 教育心理学的新研究学习动机的激发方法
- 2025年中国返兴奋剂试题及答案
- 非遗文化中国美学盘扣介绍课件
- 生产香皂管理办法
- 数据资源管理制度
- 糖尿病酮症酸中毒治疗指南课件
- 学堂在线 唐宋词鉴赏 章节测试答案
- 【生鲜农产品供应链管理分析的国内外文献综述4000字】
- 2025年广东省中考语文试卷真题(含答案解析)
- 书法六级理论考试试题及答案
评论
0/150
提交评论