java web程序设计教程spring2文档格式.docx
- 文档编号:22675082
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:9
- 大小:19.90KB
java web程序设计教程spring2文档格式.docx
《java web程序设计教程spring2文档格式.docx》由会员分享,可在线阅读,更多相关《java web程序设计教程spring2文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
为Bean添加List类型属性和Set类型属性的格式相同,下面以List为例。
beanid=itemclass=com.shop.Itempropertyname=namelistvalueSpringBook/valuevalueStruts2Book/valuevalueHibernateBook/value/list/property/beanc)Map:
为Bean添加Map属性,必须声明主键及对应数值,示例如下:
beanid=itemclass=com.shop.Itempropertyname=namemapentrykeyvaluespring/value/keyvalueSpringBook/value/entryentrykeyvaluestruts2/value/keyvaluestruts2Book/value/entryentrykeyvaluehibernate/value/keyvaluehibernateBook/value/entry/map/property/beand)引用其它Bean:
多数情况下,各个Bean都不是独立存在的,而是要与其它Bean发生关联。
如果想在一想在一个Bean中引用其他Bean,就要用到property的ref元素.beanid=userDaoclass=com.shop.Item/beanid=userFacadeclass=sunyang.service.UserFacadeImplpropertyname=userDaorefbean=userDao//property/beane)简化配置:
以上都是完整式,下面是简化的:
i.变量beanid=userDaoclass=com.shop.Item/propertyname=userDaovalue=SpringBook//beanii.Map简化后的配置beanid=userDaoclass=com.shop.Item/propertyname=userDaomapentrykey=Springvalue=SpringBook/entrykey=struts2value=struts2Book/entrykey=hibernate3value=hibernate3Book//map/property/beaniii.引用其它的Beanbeanid=userDaoclass=com.shop.Item/beanid=userFacadeclass=sunyang.service.UserFacadeImplpropertyname=userDaoref=userDao//bean3.AOP核心概念:
控制反转IoC实际包括两部分内容:
控制和反转。
所谓控制指的是对象应该调用哪个类的控制权,而反转指的控制权应该由调用对象转移到容器或者框架。
使用IoC后对象将会被动地接受它所依赖的类而不要自己主动去找该类,容器会将对象的依赖类提供给它。
4.AOP核心概念:
a)关注点(concern):
一个关注点可以是一个特定的问题、概念、或应用程序必须达到的一个目标。
在多数应用程序中,日志记录、安全检测都是关注点。
如果一具关注点的实现代码被多个类或方法所引用,这个关注点就可被称为横切关注点(crosscutting).b)方面(aspect):
一个方面是对一个横切关注点的模块化,它将零散的关注点代码进行整合,类似于为OOP中定义一个实现某功能的类。
连接点(joinpoint):
程序执行过程中的某一点,如方法调用或者抛出特定异常c)d)通知(advice):
特定的连接点应该执行的动作,主要包括3种类型:
前置型通知(beforeadvice)、后置型通知(afteradvice)和环绕型通知(aroundadvice)。
在多数OOP框架中,通知都是以拦截器的形式来实现的,SpringAOP也是如此。
切入点(pointcut):
定义了在哪些连接点处使用通知,在应用中一般通过指定类名、方法名、或者通过匹配类名、方法名样式的正则表达式来指定切入点目标对象(target):
指定通知的对象,该对象既可以是自己编写的也可以是第三方类。
通过AOP技术,能够将目标对象中的业务逻辑代码与日志等非逻辑代码进行分离。
织入(weaving):
将方面应用到目标对象从而创建新的代理对象5.EependencyInjection,DI(依赖注入)的3种方式:
意思是由框架或容器将调用类注入给调用对象,以此来解除调用对象和被调用类之间的依赖关系。
1.构造函数注入:
通过类的构造函数,并将被调用类当作参数传递给构造函数,以此来实现注入。
示例如下:
a)Java文件中:
publicclassOlympicSong{e)f)g)privateSingersinger;
publicOlympicSong(Singersinger){this.singer=singer;
}publicvoidsing(){singer.singTheSong(OlympicSong);
}}b)在XML配置文件中添加OlympicSong和Singer的配置信息如下:
beanid=singerclass=sunyang.SpringIoC.Singer/beanid=olympicSongclass=sunyang.SpringIoC.OlympicSongpropertyname=singerref=singer//bean使用构造函数注入演唱者以后,OlympicSong这个类就不必关心由谁来完成sing()方法了。
只要为构造函数传入一个Singer类型的参数,就可以实现sing()方法的功能,如下:
publicclassDirector{publicvoiddirect(){Singersinger=newLiuHuan();
OlympicSongolympicSong=newOlympicSong(singer);
olympicSong.sing();
}在上面这段代码中,Director指定LiuHuan这个对象为演唱者,并将其注入给OlympicSong这个类,最终实现由LiuHuan这个对象来实现sing的功能。
c)设值方法注入(SetterInjection):
通过添加并使用被调用类的setter方法来完成注入过程。
使用设置方法注入的示例如下:
publicclassOlympicSong{privateSingersinger;
publicvoidsetSinger(Singersinger){this.singer=singer;
}}这里也需要在XML配置文件中对OlympicSong和Singer进行配置。
配置信息与使用构造函数注入方式相同。
上面的代码为OlympicSong这个类提供了一个Singer对象的Setter方法,用于注入具体对象,应用时只需调用这个Setter方法即可将具体对象注入给OlympicSong这个类,具体如下:
OlympicSongolympicSong=newOlympicSong();
singer.setSinger(singer);
}}d)接口注入:
将被调用类所有需要注入的方法封装到接口中,被调用类实现接口中定义的方法,以此来实现注入。
IoC设计模式通常也被称为好莱坞原则----Don’tcallme,I’llcallyou.。
这是IoC的工作机制。
Spring框架常用前两种方式。
e)f)g)注:
使用构造函数注入可以隐藏注入字段的信息,而使用设值方法注入则会暴露所有的注入字段信息。
h)使用设值方法注入时,可以明确定义每个设值方法的名称;
而使用构造函数注入时只能由参数的位置决定参数的作用。
因此在参数较多的时候,应该选择设值方式注入。
6.SpringAOP是基于AOP这一基本思想,但却侧重于一个能与SpringIoC容器整合使用的AOP框架。
在SpringAOP中一些AOP的核心概念的含义发生了改变,包括:
a)切面(aspect):
切面就是要横切加入的功能。
b)顾问(advisor):
这是Spring框架引入的一个新的概念,在SpringAOP中一个advisor可以被理解为一个模块化的aspect。
一个advisor由advice(通知)和pointcut(切入点)两部分组成。
在Spring框架中提供了大量的advisor实现,实际应用中可以直接使用这些实现。
c)连接点(joinpoint):
:
SpringAOP中只支持MehodIovocation(方法回调)一种类型的连接点。
d)通知:
(advice):
SpringAOP为通知的实现提供了两种方式:
实现Advice接口和实现MethodInterceptor接口。
实际上MethodInterceptor接口是Advice接口的子接口,它采用拦截器的方式提供了环绕型通知的实现方式。
e)切入点(pointcut):
切入点是连接点的集合,用于指定程序中需要注入通知的位置,也就是声明在何种条件下发出通知。
f)拦截器:
(interceptor):
在SpringAOP中不仅可以使用拦截器对方法拦截,还可以将多个功能构建成拦截器链。
g)织入(weaving):
织入是将切面应用到目标对象而创建一个新的代理对象的过程,这一过程通常由代理工厂来实现。
程序执行前进行相应配置后,容器就能够按照配置信息,在指定切入点将通知织入系统之中。
7.Spring的通知:
BeforeAdvicea)org.springframework.aop.BeroreAdvice是前置型通知,用于在指定方法被调用之前将通知织入系统。
b)实例演示如下:
i.创建名为message的Java类,该类用于输出一句信息,代码如下;
publicclassMessage{publicvoidprintMessage(){System.out.print(输出信息);
}}ii.创建一个名为BeforeMessage的Java类,org.springframework.aop.MethodBeforeAdvice该类实现了接口并重写了MethodBeforeAdvice接口的before接口的before()方法,代码如下:
importjava.lang.reflect.Method;
importorg.springframework.aop.MethodBeforeAdvice;
publicclassBeforeMessageimplementsMethodBeforeAdvice{publicvoidbefore(Methodarg0,Object[]arg1,Objectarg2)throwsThrowable{System.out.println(在信息之前通知);
}}iii.创建一个名为:
Test的Java类,该类用于测试前置型通知,它的详细代码如下:
importorg.springframework.aop.BeforeAdvice;
importorg.springframework.aop.framework.ProxyFactory;
publicclassTest{publicstaticvoidmain(String[]args){Messagemessage=newMessage();
BeforeAdvicebfAdvice=newBeforeMessage();
ProxyFactoryprFactory=newProxyFactory();
//使用Spring代理工厂prFactory.setTarget(message);
//设置代理目标prFactory.addAdvice(bfAdvice);
//织入通知Messagem=(Message)prFactory.getProxy();
//由代理工厂生成代理对象m.printMessage();
}}程序在控制台输出,首先输出了在信息之前的通知语句然后才输出输出信息语句,也就是说在printMessage()方法调用前,设置的前置通知BeforeMessage已经织入系统。
说明:
为了程序能够正常运行,此工程需要引入spring.jar,commons-logging.jar和cglib-nodep-2.1_3.jar这3个运行库文件。
8..Spring的通知:
AfterReturningAdvice指定方法被调用之后将通知织入系统,与前置通知一个,不同的后置通知需要定义一个实现AfterReturningAdvice接口的类。
第三步中:
AfterReturningAdvicebfAdvice=newAfterMessage();
第二步骤:
importorg.springframework.aop.AfterReturningAdvice;
publicclassAfterMessageimplementsAfterReturningAdvice{publicvoidafterReturning(Objectarg0,Methodarg1,Object[]arg2,Objectarg3)throwsThrowable{System.out.println(在通知之后的通知);
}}a)首先输出输出信息,然后输出在信息之后的通知,也就是在printMessage()方法被调用之后,设定的后置型通知AfterMessage被织入系统。
9.Spring的通知:
org.aopalliance.intercept.MethodInterceptor:
是环绕型通知,用于在指定方法前、执行后通知织入系统,可以实现两种织入。
与第一个在第二部的不同,第二步中,MethodInterceptorbfAdvice=newInterceptorMessage();
如下:
BeforeMessage创org.aopalliance.intercept.MethodInterceptor接口并重写了MethodInterceptor接口的invoke()方法,代码如下:
importorg.aopalliance.intercept.MethodInterceptor;
建一个名为的Java类,该类实现了importorg.aopalliance.intercept.MethodInvocation;
publicclassInterceptorMessageimplementsMethodInterceptor{publicObjectinvoke(MethodInvocationarg0)throwsThrowable{System.out.println(输出信息之前的通知);
//指定方法被调用前执行Objectobj=MethodInvocation.proceed();
//通过反射机制获得调用方法System.out.println(输出信息之后的通知);
returnobj;
}}首先输出输出信息之前的通知然后输出信息,最后输出信息之后的通知10.org.springframework.aop.ThrowAdvice为异常通知,当指定方法在调用的过程中抛出异常时将通知织入系统。
异常通知经常被用于事务管理,当程序执行过程中发生异常时,事务需要执行回滚操作。
a)创建名为MyException的Java类,该类用于产生一个异常,实现代码如下:
publicclassMyException{publicvoidcreateException(){thrownewRuntimeException();
}b)创建一个名org.springframework.aop.ThrowsAdvice接口,在该类中包含一个afterThrowing(),为MyThrowAdvice的java类,该类实现了用于输出异常发生的函数。
代码如下:
importorg.springframework.aop.ThrowsAdvice;
publicclassMyThrowsAdviceimplementsThrowsAdvice{publicvoidafterThrowing(Methodmethod,Object[]args,Objecttarget,Exceptione){System.out.println(异常发生的函数为+method);
}}i.注意:
虽然ThrowsAdvice接口中并没有定义任何方法,但是在使用异常通知时,必须保证ThrowsAdvice接口的实现类中包含一个名为afterThrowing的方法,且该方法最多可以添加4个参数:
Mehodmethod、Object[]object、Objecttarget和ThrowablethrowAble(或Throwable的子类对象)。
其中前3个参数是可选参数,但是如果想要加入这几个参数,则必须保证3个参数同时存在。
创建一个名为Test的Java类,用于测试异常通知,如下:
c)importorg.springframework.aop.framework.ProxyFactory;
publicclassTest{publicstaticvoidmain(String[]args){MyExceptionmyException=newMyException();
ThrowsAdvicetrAdvice=newMyThrowsAdvice();
//使用Spring代理工厂prFactory.setTarget(myException);
//设置代理目标prFactory.addAdvice(trAdvice);
//织入通知MyExceptionmyEx=(MyException)prFactory.getProxy();
//由代理工厂生成代理对象myEx.createException();
}i.}奔
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java web程序设计教程spring2 web 程序设计 教程 spring2
![提示](https://static.bdocx.com/images/bang_tan.gif)