请教汽车行业英语口语达人达人,AOP Comp...

Java Spring&SpringMVC(11)
面向切面编程
首先介绍动态代理:
动态代理可以在类的所有方法之前增加业务逻辑。jdk中的类想要被动态代理,必须实现接口(假设Target实现了接口ITarget)。使用proxy与实现InvocationHandler接口,来实现动态代理(参视频:动态代理)。PHandler实现InvocationHandler接口,其中含有private的Object(被代理对象target)。在自己的invoke方法(参见反射)中先写入自己的代理前业务逻辑,再通过反射方法调用被代理对象的对应方法(即method.invoke(target,args)),最后加上代理后业务逻辑。如果针对不同的业务逻辑增加不同的业务,可以将method传入PHandler的beforeMethod()方法,进而判断不同的method写入不同的beforeMethod方法内容。
实现动态代理的过程为:先产生一个被代理对象target,产生一个PHandler,将target用setter传给PHandler。然后使用ITarget targetProxy = Proxy.newProxyInstance(),将target与handler传入,传入方法为arg0:target.getClass().getClassLoader(),arg1:target.getClass().getInterfaces(),arg2:PHandler。handler中含有我们想加入的业务逻辑,target为被代理对象,含有原来的业务逻辑。
最后执行targetProxy.业务逻辑(业务参数);执行时先执行handler的begin逻辑,再执行target,最后执行handler的end逻辑。
Spring中的AOP实现,背后使用的是动态代理的实现(对有实现的类),对没有实现接口的类直接更改二进制码。
AOP的实现:
java中实现AOP,需要在Spring的.xml中增加xmlns=“http://.../aop”,xsi:schemalocation中加schema/aop,schema/aop/spring-aop-2.5.xsd(可以在spring的samples中寻找例程,或者dist/resources寻找aop的.xsd)(在IDE的XML Catalog中增加后一个.xsd可以获得IDE的提示功能)。在.xml正文中增加&aop:aspectj-autoproxy/&,即可使用@AspectJ标签(程序会扫描@AspectJ标签并进行动态代理)。
AspectJ:AspectJ是一个专门用于产生动态代理功能的项目。Spring也使用了AspectJ进行AOP实现。使用AJ时要引入AspectJ的两个.jar包。
AOP的使用:
在类名前添加@Aspect标签(表示此类可以作为切面进行织入),并加入@Component(将此类交给Spring初始化,用于织入工作)。在想要在原逻辑前织入的业务逻辑(如beforeMethod())(其实也有将类,属性织入的,暂不讨论)上方加@Before标签(或任何Advice),即实现了将beforeMethod()织入原对象逻辑。
@Before的语法:
@Before(&execution(public 返回值类型 pany.dao.impl.UserDAOImpl.函数名(pany.model.函数参数类名)”):将被@Before形容的方法织入到execution形容的函数名执行之前。execution是方法织入的专用关键词。
JoinPoint:
切入点,即在原逻辑中的哪些点需要织入切面逻辑;也即在从前往后的业务逻辑中插入切面时,在原逻辑中被织入的位置。
PointCut:
切入点的集合。
@Pointcut(&execution(* pany.someapp.service.*.*(..))&)
public void someMethod(){}
代表在pany.someapp.service下的任何类的任何方法都是someMethod()的切入点。
someMethod可以是空实现,作为Advice的参数。在此之后可以在任何Advice的参数中写someMethod(),即可在此切入点集合中执行。
代表在切面上的建议逻辑。如@Before,@After都是切入点上的建议。
被代理对象(被织入对象)。
AOP支持的AspectJ语法:
execution(public * *(..)):公开的任何返回值的任何方法
execution(* set*(..)):任何返回值的任何方法名为set打头的方法
execution(* p.service.*.*(..)):任何返回值的service包下的任何类的任何方法
execution(* p.service..*.*(..)):任何返回值的service包下及其子包(无限层)的任何类的任何方法
AOP自成语法:
p.service.*):
p.service..*):
p.service.SomeService):
p.service.SomeService):
args(java.io.Serializable):
Advice类型:
@before(&execution()&)或者Before(someMethod)[参见上PointCut解释]:
@AfterReturning:于目标方法正常返回后执行。
@AfterThrowing:于目标方法抛出异常后执行。
@After:即finally,不论异常或正常返回均执行。
@Around:环绕。被环绕修饰的方法public Object doBasicProfiling(方法名可换),参数为ProcedingJoinPoint pjp(不可换),throws Throwable。
在此方法中先写before织入逻辑,再写Object retVal = pjp.proceed();,再写after织入逻辑,最后 return retV。(可参责任链模式的视频)
Advice的参数可以是execution,也可以是someMethod[参见PointCut解释]
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:18434次
排名:千里之外
原创:53篇
转载:22篇
(5)(5)(2)(1)(18)(3)(2)(16)(9)(1)(2)(2)(2)(1)(1)(4)(2)只影落寞的喜欢 | LOFTER(乐乎) - 让兴趣,更有趣
LOFTER for ipad —— 让兴趣,更有趣
只影落寞 的喜欢
&nbsp&nbsp被喜欢
&nbsp&nbsp被喜欢
{list posts as post}
{if post.type==1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type==2}
{if post.type == 3}
{if !!post.image}
{if post.type == 4}
{if !!post.image}
{if !!photo.labels && photo.labels.length>0}
{var wrapwidth = photo.ow < 500?photo.ow:500}
{list photo.labels as labs}
{var lbtxtwidth = Math.floor(wrapwidth*(labs.ort==1?labs.x:(100-labs.x))/100)-62}
{if lbtxtwidth>12}
{if !!labs.icon}
{list photos as photo}
{if photo_index==0}{break}{/if}
品牌${make||'-'}
型号${model||'-'}
焦距${focalLength||'-'}
光圈${apertureValue||'-'}
快门速度${exposureTime||'-'}
ISO${isoSpeedRatings||'-'}
曝光补偿${exposureBiasValue||'-'}
镜头${lens||'-'}
{if data.msgRank == 1}{/if}
{if data.askSetting == 1}{/if}
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post_index < 3}
{if post.type == 1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
{if drlist.length>0}
更多相似达人:
{list drlist as dr}{if drlist.length === 3 && dr_index === 0}、{/if}{if drlist.length === 3 && dr_index === 1}、{/if}{if drlist.length === 2 && dr_index === 0}、{/if}{/list}
暂无相似达人,
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
this.p={ dwrMethod:'queryLikePosts',fpost:'',userId:,blogListLength:3};> 【答案带解析】如图所示,∠AOP=∠BOP=15°,PC∥OA,PD⊥OA,若PC=4,则PD...
如图所示,∠AOP=∠BOP=15&,PC∥OA,PD⊥OA,若PC=4,则PD等于( )A.4B.3C.2D.1
过点P做PM∥CO交AO于M,可得∠CPO=∠POD,再结合题目推出四边形COMP为菱形,即可得PM=4,又由CO∥PM可得∠PMD=30°,由直角三角形性质即可得PD.
如图:过点P做PM∥CO交AO于M,PM∥CO
∴∠CPO=∠POD,∠AOP=∠BOP=15°,PC∥OA
∴四边形COMP为菱形,PM=4
PM∥CO=>∠PMD=∠AOP+∠BOP=30°,
又∵PD⊥...
考点分析:
考点1:含30度角的直角三角形
(1)含30度角的直角三角形的性质:在直角三角形中,30°角所对的直角边等于斜边的一半.(2)此结论是由等边三角形的性质推出,体现了直角三角形的性质,它在解直角三角形的相关问题中常用来求边的长度和角的度数.(3)注意:①该性质是直角三角形中含有特殊度数的角(30°)的特殊定理,非直角三角形或一般直角三角形不能应用;②应用时,要注意找准30°的角所对的直角边,点明斜边.
考点2:菱形的判定与性质
(1)依次连接四边形各边中点所得的四边形称为中点四边形.不管原四边形的形状怎样改变,中点四边形的形状始终是平行四边形.(2)菱形的中点四边形是矩形(对角线互相垂直的四边形的中点四边形定为矩形,对角线相等的四边形的中点四边形定为菱形.)(3)菱形是在平行四边形的前提下定义的,首先它是平行四边形,但它是特殊的平行四边形,特殊之处就是“有一组邻边相等”,因而就增加了一些特殊的性质和不同于平行四边形的判定方法.(4)正方形是特殊的菱形,菱形不一定是正方形,所以,在同一平面上四边相等的图形不只是正方形.
相关试题推荐
如图,小区的一角有一块形状为等腰梯形的空地,为了美化小区,社区居委会计划在空地上建一个四边形的水池,使水池的四个顶点恰好在梯形各边的中点上,则水池的形状一定是( )A.等腰梯形B.矩形C.菱形D.正方形
若一组数据a1,a2…an的方差为2,则新数据3a,3a2,3a3…3an的方差为( )A.18B.6C.12D.2
已知甲、乙两组数据的平均数分别是甲=80,乙=90,方差分别是S甲2=10,S乙2=5,比较这两组数据,下列说法正确的是( )A.甲组数据较好B.乙组数据较好C.甲组数据的极差较大D.乙组数据的波动较小
下列说法中,错误的是( )A.平行四边形的对角线互相平分B.矩形的对角线相互垂直C.菱形的对角线互相垂直平分D.等腰梯形的对角线相等
如图,要设计一个等腰梯形的花坛,花坛上底120米,下底180米,上下底相距80米,在两腰中点连线(虚线)处有一条横向甬道,上下底之间有两条纵向甬道,各甬道的宽度相等.设甬道的宽为x米.(1)用含x的式子表示横向甬道的面积;(2)当三条甬道的面积是梯形面积的八分之一时,求甬道的宽;(3)根据设计的要求,甬道的宽不能超过6米.如果修建甬道的总费用(万元)与甬道的宽度成正比例关系,比例系数是5.7,花坛其余部分的绿化费用为每平方米0.02万元,那么当甬道的宽度为多少米时,所建花坛的总费用最少?最少费用是多少万元?
题型:选择题
难度:中等
Copyright @
满分5 学习网 . All Rights Reserved.}

我要回帖

更多关于 英语口语达人 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信