版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章SPRING的基本介 SPRING框架的学习内 SPRING的相关的概 SPRING的快速案 第2章SPRING配置 BEAN对象其它BEAN对 直接配置内部BEAN对 给BEAN对象的集合类型属性赋 给BEAN对象的PROPERTIES集合类型属性赋 通过静态工厂获取BEAN对 通过实例工厂获取BEAN对 通过FactoryBean获取bean对 BEAN创建的顺序问 配置BEAN的后置处理 基于XML的BEAN的自动装 SPEL表达 第3章基于注解的方式配置 基于注解的方式配置BEAN-通过类型获 基于注解的方式配置BEAN-通过类型获取(快速案例 基于注解的方式配置BEAN-小结一 基于注解的方式配置BEAN-通过ID来获 基于注解的方式配置BEAN的细节说明-小结 INCLUDE-FILTER的使 基于注解的方式配置BEAN-@AUTOWIRED自动装 基于注解的方式配置BEAN-泛型依赖注 第4章切面编程 AOP的基本介 AOP的快速案 AOP-连接点 基于XML配置的AOP实 第5章SPRING的JDBCTEMTE技 JDBCTEMTE-配置数据 JdbcTemte-数据源分配给JdbcTemte JDBCTEMTE-完成...........................................................................................................................................JDBCTEMTE-完成...........................................................................................................................................查询id>=200的monster并封装到Monster实体对 第6章式事 式事务-事务的机 如何修改式事务的机 式事务-事务的级 基于XML的式事 1章Springspring框架的学习内spring就是一个管理框架的框架,可以理解成就是一个超大的容器.主要四大块:事务springSpring可以整合其他的框架(是管理框架的框架Spring有两个的概念:IOC和Ioc控制反转/反转控制)InversionOf传统的编程 程序------>环spring设计理念:程序 环spring的快速案要求通过ioc容器配置一个Monster对象(bean),并且通过java程序来获取这个bean,并输出信息步骤-安装一把springspring的插件文件根据eclipsehelp->instalnewsoftware->选中四个springide相关的插件下面点的方式-》next->next...成功成功后可以看到spring创建java项创建lib文件夹,并引入springspring包\spring需要的所有jar\16开发了一个一定要写属性的setXXX和getXXX方法,开发spring的ico容器beans.xml,该文件放在点击src->new->springbeanconfig》名字beans.xml->beans[后面也可以在加第2 spring配置说明:iocbeanbean注入属前面快速案例是通过id来获取bean,还可以通过类型来获取bean对象案例演示通过构造器来配置beanjunit的案例通过p说明:在spring的ioc容器,可以通过p名称空间来配置bean对象注意p名称空间在bean内部,此时bean是单//出现下面错误的原因是没有引入pjunitbean对象其它bean对说明:在spring的ioc容器,可以通过ref来实现bean对象的相互案例直接配置内部bean说明:在spring的ioc容器,可以直接配置bean对象内部的bean,可以不配置id,这样其它的bean就无法的.相当于创建一个对象赋值给属给bean说明:给bean对象的ListMap,Properties集合属性赋值.List里面的ref还要写上一个bean,bean的idjunit案例:beanmapjunitbeanpropertiesproperties是文本文件,它的值直接写在里面.list,map集合放的是对象,所以要使用junitproperties是文本文件所以在遍历的时候它的元素类型是通过utillist通过spring容器创建list在使用util创建Map,Lis和上面给集合属性赋值是一样的,可以bean对junit程序举例说明举例通过静态工厂获取bean开发一个静态工厂类[会初识化一些数据junit首先创建一个静态工厂类(里面的东西收拾静态的),来获取个对象,spring容器里面配置获取需要的对象.最后,在Test类里面获取通过实例工厂获取bean案例创建实例工厂类工厂类初始化之后就有相应的对象,然后在容器里面配置,得到需要的对象,最后在Test类里面获取静态工厂和实例工厂的bean配置的区别:静态工厂可以直接通过类名调用.实例工厂要先创建一个实FactoryBeanbean通过FactoryBean获取你要的bean对象,我们需要开发一个MyFactoryBean接受你需要的master定义的bean配置信息重用(继承OOP继承.1:不能实例化,就是不能直接通过getBean获取.如果想要使用这个抽象bean里面的的需要其他bean对象继承这个抽象的bean对象bean默认情况下是按照顺序来创建如果确实有依赖关系,你以通过调整顺序或者使用depends-onbean在默认情况下,ioc容器中配置的bean是以单例的默认进行创建,即不管你getBean多少次,始bean,则将该bean首先该bean就不在容器加载时创而是当我们getBean时,才会动态的创建这个案例代码配置有生命周期的我们配置一个bean,包括构造方法被创建,初始化的方法 销毁方法Cat.java有编写了各种方法inti packagepackagepublicclassCatprivateStringpublicStringgetName()return}publicvoidsetName(Stringname)=}publicCat()System.out.println("cat被出生了了}//publicvoidinit()//TODOAuto-generatedmethodSystem.out.println("小猫被初始化给他取名}publicCat(Stringname)=name;}publicpublicSystem.out.println(快乐的玩耍}publicvoiddestory()//TODOAuto-generatedmethodstubSystem.out.println(100岁,安息..");}}junit程序在spring配置bean步骤:先开发一个自己的后置处理器[实现一个接口案例说明在spring的ioc容器,可以配置bean的后置处理器,该处理器会在bean初始化方法调用前和初始化需求:【aop】后置处理器,需要实现BeanPostProcessor接被初始化的前后,都会调用程序员编写的代码(该bean在配置时指定了初始化方法关联spring的源码包是:spring-beans-4.0.0.RELEASE-配置这个文件之后,不论运行那个bean对象,它都会将所有的bean对象的默认初始化的前后执行bean说明在 下创建了perties文juintXML的bean说明:在spring的ioc容器,bean,需要iocOrderAction属性:OrderServiceorderService]OrderServcie[OrderDaoorderDao]1.传统的方式就是就是通过 ,具体代码2基于XMLbean的自动通过类型完成自动装//在容器里面只能有一个同类型的bean,通过名字完成自动装SpEL表达式 SpEL表达式,知道怎么使用即可.基本语法是#{spel表达式}.演示一下spel的常见的使用方式.bean3章基于注解的方式配置基于注解的方式配置bean-注解配置与传统的配置并不,如果默认的ID和IOC中有相同的ID就会发生spring提供的注解哟四种.@Component表示它是一个组件@Controller//表示是一个控制器@Service//表示一个业务逻辑类@Repository表示一个持久层类.需要引入一个新包spring-aop-基于注解的方式配置bean-通过类型获取(快速案例测试程序基于注解的方式配置bean-如果我们希望ioc扫描本包以及该包的子包,则可以使用* resource-pattern="User*.class"表示只扫描满足条件的.基于注解的方式配置bean-id默认情况:标记注解后,类名首字母小写作为id默认id就 ponent.默认的id是类名的首字母小我们也可以给@Component指定当我们指定id后,在获取bean时,就应该使用id的方式获取//疑问:通过注解的方式配置bean,不能是双方关联当然我们以可以给@Controller和@Serivice@Respository对应的bean设置基于注解的方式配置bean的细节说明-如果将排除的注解写 ponent,那么其他的注解就不能用案例include-filter的使如果我们希望只是扫描某个包下面的哪些注解,可以使用include-filter来指定. ponent下的@Component注解扫描. 基于注解的方式配置bean-@AutoWired说明:在spring的ioc容器中,也可以实现自动装配。使用的注解是:@AutoWired,一般来说是基本案例//bean的创建要调用无参构造方法,在IOC容器里面给属性赋值是同getsetjunit使用的细节在IOC容器中查找待装配的组件的类型,如果有唯一的bean匹配,则使用这个bean进行装配.//首先是通过属性的类型在IOC容器里面进行查找.如待装配的类型对应的bean在IOC容器中有多个则使用待装配的属性的属性名作为id值再进行查找,找到就装配,找不到就抛异常.如果有多个类型bean,也可以通过@Qulifier注解来指定组装的id.//在类中有注解的前提下,他的默认ID是他的类名的首写字母小写作为他的ID. //如果类里面有多个相同的类型的bean对象,可以设置ID来选择匹配对通过@Qualifier注解在方法的参数前指定哪个bean作为该参数//一个在成员位置添加注解,一个在方法的参数中添加直接的效果是一样的.只需要一个就可以//基于直接的方式配置bean,它默认的ID基于注解的方式配置bean-基本说明传统方法就是直接将PhoneDao 自动装配到BookService/PhoneSerive/中但是后面如果继承关系复杂了,就会有很大的优越性[大家体会]具体的测试案例小韩的问题实现多实例,添加scope4章切面编程就使用java基础知识就可以搞定缺点是,代码很麻烦,复用性不高思路:我们写一个动态类,可以获取到SmartDog的动态对象,然后调用它.MyPorxyProvider.java动态如何使用动态类的对这种方式的分析优点:可以非常好的完成日志的管理,代码的性很好.复用性缺点:AOP全称 programming),面向切面的编程AOP日连接点:切面类可以通过连接点,获取到目标类的目标方法签名通知(五种切入表达aopaop需要引入的aspect包,后面案例会具体说aop编程的五个通知1:环绕通知可以完成另外四个通知的所有事情2:aop的快速案案例要求首先先开发好我们的目标类(SmartAnimalable.java 在iocaop 需要在iocAOP功能 packagepackageimportimportorg.aspectj.lang.annotation.AfterReturning;importorg.aspectj.lang.annotation.AfterThrowing;importorg.aspectj.lang.annotation.Aspect;importimportimport@Aspect@Component表示是一个组件,会被扫描@authorpublicclassSmartAspect@Before: 值后面写的时候切入表达式 execution:publicfloatcom.itbull.spring.aop.SmartDog.getSum(float,float)你有对哪个类的哪**publicfloat..@Before(value="execution(publicfloatcom.itbull.spring.aop.SmartDog.getSum(floatpublicvoid}@AfterReturning(value="execution(publicfloatcom.itbull.spring.aop.SmartDog.*(..))")publicvoidshowSuccessLog(){}@AfterThrowing://@AfterThrowing(value="execution(publicfloatcom.itbull.spring.aop.SmartDog.*(..))")publicvoidshowExceptionLog(){}@After//@After(value="execution(publicfloatpublicvoidshowFinallyLog(){publicvoidshowFinallyLog(){}}一个类实现一个接口后,bean之后,只能从容器里面获取接口的类型,根据接口在使用切面类的时候首先要开启基于注解的aop功能,,aop1.案例:看一个需求举例说明举例package案例:如何使用环绕通知完成其它四个通知的功能,说明;环绕通知做的事情,和动态完成的事情非常的相似packageimportimportimportimportimportimportimportorg.aspectj.lang.annotation.AfterReturning;importorg.aspectj.lang.annotation.AfterThrowing;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;importorg.springframew @Aspect表示是一个切@Component表示是一个组件,会被扫描@authorpublicclassSmartAspect//开发一个前置通知,在目标类的目标方法前@Before前置通value=值后面写的时候切入表execution(publicfloatexecution:关键字不要publicfloatcom.itbull.spring.aop.SmartDog.getSum(floatfloat)你有对哪个类的哪个方法切面编码特别强调回 publicfloat 修饰符和返回值要有..//@Before(value="execution(publicfloatcom.itbull.spring.aop.SmartDog.*(float,float))")//publicvoidshowStartLog(JoinPoint //得到函数的签 Signaturesignature= //获取函 Stringname= //获取函数的参 Object[]args= System.out.println("前置通知目标方法的名name参数"+Arrays.asList(args));//@AfterReturning返回通知你的目标类的目标方法执行完毕后,就执行的代如何在回通知获取到结//开发一个返回通知,在目标类的目标方法前//@AfterReturning(value="execution(publicfloatcom.itbull.spring.aop.SmartDog.*(..))",returning="tnres")//publicvoidshowSuccessLog(JoinPointjoinPoint,Objecttnres) System.out.println("返回结果是//@AfterThrowing:异常通知,当被执行的目标方法发生异常是会执如何在异常通知中,获取到目标方法的异//开发一个返异常通知,在目标类的目标方法前执//@AfterThrowing(value="execution(publicfloatcom.itbull.spring.aop.SmartDog.*(..))",//publicvoidshowExceptionLog(JoinPointjoinPoint,ThrowablemyThrowing){ System.out.println("异常通知异常信息//@After终通知//开发一个最终通知,在目标类的目标方法前执//@After(value="execution(publicfloat//publicvoidshowFinallyLog() System.out.println("最终通知//环绕通知的案例,(完成其它四个通知的任务@Around(value="execution(publicfloatpublicObjectdoAround(ProceedingJoinPointObjectresult=//获取目标方法的签Signaturesignature=joinPoint.getSignature();Stringname=signature.getName();Object[]args=try//完成前置通知的事System.out.println("前置通知目标方法的名name参数//调用目标方result=//返回通System.out.println("返回结果是}catch(Throwablee)//异常通知的事System.out.println("异常通知异常信息//TODO:handle}//最终通System.out.println("最终通知}}return}}Object学编程本质==>学习框架,写项目的过程【提升对编程和设计思想】==》说明一个问题用率不高,因此spring提供切入表达式重用的机制.定义一个切入表达式,在需要的地方直接使用即可//注意在切入表达式的重用,基本语法:通过@Order(value=n)=>如果n越小,则优先级越高案例演示后出栈.先执行优先级低的其他通知,再执行优先级高的其他通知关于base-package说明 ponent-scanbase-如果我们这样配base-package="com.itbull.spring.aop":就会扫描com.itbull.spring.aop,我们可以直接认base-package="com.itbull.spring.aop.*"就是只会扫描com.itbull.spring.aop下子包而不会扫描本base-package="com.itbull.spring.aop.**"就是本包和子包都扫描基于xmlAOP<!- 关闭基于注AOP />--在applictionContext.xml配置,让这个普通的SmartXMLAspect//这个普通类没有@Aspect第5章spring的JdbcTemte技如果我们希望通过spring框架完成对数据库的,可以使用spring提供的JdbcTemte类因为JdbcTemte类需要一个数据源因此我们需要先配置一个数据源(bean),提供给JdbcTem步骤先创建一个新的项目springJdbcTem引入了需要的配置4:编写perties,放在类路径下说明:eclipse做了一个5:DataSource接口,在IOC容器里配置了它的实现类的bean.在调用的时候是使用它的接url创建数据源就是给JdbcTemte的对象(bean),下面看看具体操给jdbcTemte分配数据源只有才能数据1:monstercreatetablemonster(idintprimarykey,namevarchar(64)notnulldefault'',skillvarchar(64)notnulldefault''insertintomonstervalues(100青牛怪吐火');insertintomonstervalues(200黄袍怪吐烟');insertintomonstervalues(300蜘蛛怪吐丝测试程序更新一个monster的批量添加二个monster查询id=100的monster并封装到Monster实体对象这里会使用到一个springRowMapper查询id>=200monster并封装到Monster查询返回结果只有一行一列的值,比如查询id=100使用Map传入具名参数步骤:首先先在ioc容器中配置一个NamedParameterJdbcTemtebean,然后以构造器的方式来注入dataSource.步骤:使用具名的jdbcTemte完成操作.比如添加螃蟹使用sqlparametersoruce来封装具名参数,还是添加一个MonsterDao对象中使用JdbcTemte完成对数据的操//使用就注解的自动装配,要在IOC
第6章式事事务这个在哪里会使用到?当我们处理一个比较复杂的业务需求时,比如银行转账,比如淘宝网上支付,涉及到多个表的问题。甚至还会涉及到跨系统.事务:四个特征:1.原子性,一致性,性,持久Connectioncon=JdbcUtils.getConnection();//开始我们一系列的操作}catch(Exceptione){}特点
即我们可以通过注解的方式来说明哪些方法是事务控制的,并且可以指定事务 级别先创建三张表---- user_idintunsignedprimarykeyauto_increment,user_namevarchar(32)notnulldefault'',moneydoublenotnulldefault)charset=utf8',',CREATECREATETABLEgoods_idintunsignedprimarykeyauto_increment,goods_namevarchar(32)notnulldefault'', doublenotnulldefault)charset=utf8INSERTINTO`goods`VALUES(null,'小风扇',10.00);INSERTINTO`goods`VALUES(null,'小台灯',12.00);CREATETABLEgoods_idintunsignedprimarykeyauto_increment,goods_numintunsigneddefault0)charset=utf8INSERTINTO`goods_amount`分析开发一个写了一个junit测试,测试编写修改用余额的代码,使用Junit测试即开发一个修改库存量的方开发了//一个@Autodried在applicationcontext.xml配事务生spring一共提供了7中事务机制,常用的是REQUIRED和REQUIRED_NEW事务机制通过一个测试多个事务是一个整体,一个事务出错,如果设置为buyGoods2如果错误,不会影响到buyGoods()反之亦然,即它们的事务是独立的如果设置为buyGoods2和buyGoods以一个整体,只要有方法的事务错误,那么两个方法都不会执行成功首先,大家要清楚mysql有四种级[读未提交 mitted)读已提交(readcommitted),可重复读(repeatableread),可串行化serializable][给大家一套mysql,巩固一把默认情况下,式事务的级别是可重复读(repeatable如果修改级//如果事务里面只有查询,可以使用基于xml的式事 指定了对哪个类的哪个方法,然后再与事务切面进行级别,利用事务管理器对指定的//7章Springspring是一个管理框架的框架,因此他可以以各种组合的方式来集成hibernate,struts2,为了让大家灵活掌握各种方式,加深对spring框架的特点,会给大家演示不同的整合方式。在实际开发中,完全可能是ssshssh的方式Sr最为的价值就是可以整合/管理Hibernate和springhibernate在上一个spring的项目中集成hibernate,取名为将原来的包和配置文件都删除了导入hibernate的jar\hibernate-release-4.2.4.Final\lib\required\全部,加入到bulid创建一个源码包/conf,创建在applicationContext.xmlJunit配置开发了两个测试的实体类Goods.java 生成对应的xx.hbm.xml配置applicationContext.xml接管//springHibernate是通过在容器中配置实现的.spring接管Struts2同过jar包实现还有式配置接管hibernate方式:在applicationContext.xml到此spring已经完全接管了hibernate包括hibernate的基本配置和式事使用springhibernate完成对数据库表的操作开发一个GoodsDao.java演示.对应的Junit代码如何在项目中使用session.getCurrentSession();这样才能进行事务控制开发一个修改了GoodsDao.java8章Web前面我们的应用都是在javaappliction中使用,但是实际上我们的情况是在web应用中使struts2hibernate情况下,spring的理解,后面再整合struts2思路更加清晰spring包[tx的springTxDemo项目中Listener组件/开发一个MySpringListener,实现一个接口将自己的Listener器配置到web.xml:1.IOC,2.想要调用servlet方法就要在jsp页面调用他的9章spring我们看看如何集成struts2框架,为后面我们做ssh框架打下一个基础,就面的SpringWeb项目1springWeb2:struts2导入\struts-\libstruts2-spring-plugin-3:Struts2步骤4:配置spring提供的加载ioc容器的器,配置struts2的核测试页面-index.jspmyTestspringstruts2Action被spring创建,//这个项目出错的原因是:在web.xml中配置器出错,1.要讲容器初始化2.将器获取容器10章SSH说明:我们完成一个ssh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 作品冲抵房租协议书
- 与车子签合同写协议
- 2025年执业药师直播真题及答案
- 高标准农田灌溉设施智能化管理系统方案
- 公司下水改造协议书
- 光伏总承包合同协议
- 一般租房的合同范本
- 一次的咨询合同范本
- 供水管网漏损消减与管网改造实施方案
- 两人合资合同协议书
- GPS的课件教学课件
- 第6章 绩效反馈(《绩效管理》第3版)
- 沈阳康莱德酒店设计方案
- 2025年工行私人银行考试题库
- 2025年上海市公务员考试行测试卷历年真题参考答案详解
- 美的历程全集讲解
- 2022版10kV及以下业扩受电工程技术导则
- 中国矿业大学(北京)《MBA运营管理》2023-2024学年第一学期期末试卷
- 可移动文物管理办法
- 劳模精神教育
- 肛肠科中医课件
评论
0/150
提交评论