蒙在股里 发表于 2015-1-18 11:48:04

JAVA编程:Spring AOP之ThrowsAdvice

唉!都是钱闹的1.Swing和.net开发比较------从市场份额看.net开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具
今朝的项目中打仗了一些Spring的AOP的部分,好比声明式事件办理。在懂得了AOP在Spring的完成以后,切实其实发明这类新的编程思绪的确为我们供应用一种新的思绪办理成绩的举措。为了纪录这个进修历程,收拾一放学习的条记。







1.几个主要的观点(具体的情形拜见Spring的在线文档)







·PointCut:一组JointPoint。在Spring中我们能够经由过程一些正则表达式界说那些JointPoint构成了我们必要的一个PointCut,从而使我们的Advice能够被体例出去。



·Introduction:Introduction能够我们在已存在的类中在不修正这个类的情形下增添属性和办法,从而增添其形态和举措;



·Target:满意PointCut界说的前提的一个类,我们能够把Advice用于这个类。年夜多Spring的AOP是经由过程静态代办署理的机制完成的,这个Target就是谁人被代办署理的对象;



·Proxy:为了将一个Advice使用到别的一个类中,好比完成AroundAdvice,就是在一个办法实行前后加上其他的代码,那末实践的完成必定是先实行一段Advice的代码,然后实行Target的谁人办法,以后再实行一段Advice的代码,也就是客户端实行某个类的时分,实践实行的是一个代办署理,由代办署理再把挪用传送到谁人Target中。



·Weaving(编织):有了Target和Advice,在甚么机会将这两个模块编织在一同呢?能够选择的办法包含编译的时分(如许我们必要一个特别的编译器),装载类的时分(如许我们必要一个特别的ClassLoader)和运转的时分(AOP简单能够静态的创立一个代办署理从而将挪用由这个代办署理传送到Target类中)。







2.ThrowsAdvice







今朝的项目中有这么一个请求,关于某些处置流程假如在运转的时分抛出了一些非常,必要将这些非常的信息纪录上去,保留在数据库或发邮件给开辟职员。我们切不说这个需求跟TDD有甚么抵触的中央,先看看怎样完成吧。







依照下面观点的形貌,我们应当次要注重三个观点:Target,Advice和Proxy。







2.1Target的完成







Target就是下面所说的营业流程类,我们依照一般的开辟编写代码便可,没有甚么特别的请求。如:







publicinterfaceIBizProcess



{



voiddoOneThing();



voiddoAnotherThing();



}







publicclassBizProcessImplimplementsIBizProcess



{



publicvoiddoOneThing()



{



}







publicvoiddoAnotherThing()



{



thrownewRuntimeException(“Boom”);



}



}







2.2Advice







为了完成当营业流程抛出非常时的Advice,我们必要界说个一个Advice类,完成ThrowsAdvice接口。这个接口内里没有界说办法,我们请求我们的类必需完成afterThrows这个办法,以下:







publicvoidafterThrows(Throwablethrowable);







这个办法的后面三个参数都是可选的。我们在统一个类中界说这个办法的多个版本,如:







publicvoidafterThrowing(MyException1ex){}



publicvoidafterThrowing(MyException2ex){}







详细谁人办法被挪用则依据详细的Exception来判别,由AOP简单主动辨认实行。







2.3Proxy(代办署理)







Spring中一个复杂的完成是用它的org.springframework.aop.framework.ProxyFactoryBean。这个Bean包括了良多个属性,个中有三个我们必要设置:target,proxyInterfaces和interceptorNames,以下:







<beanid=”bizOneTarget”class=”com.company.biz.impl.BizProcessImpl”/>



<beanid=”throwsAdvice”class=”com.company.advice.MyThrowsAdvice”/>



<beanid=”bizOne”class=”org.springframework.aop.framework.ProxyFactoryBean”>



<propertyname=”target”><refbean=”bizOneTargte”/></property>



<propertyname=”proxyInterfaces”>



<value>com.company.biz.IBizProcessImpl</value>



</property>



<propertyname=”interceptorNames”>



<list>



<value>throwsAdvice</value>



</list>



</property>



</bean>







经由过程下面的设置,Spring就把Target和Advice编织在了一同。必要申明的是,proxyInterfaces和interceptorNames都能够是多个,假如是多个的话就必要用list来界说。interceptorNames的前后序次决意了这些Advice实行的前后序次。











3.简化设置







从下面的例子能够看出,假如有多个BizProcess的对象必要代办署理,我们在Spring设置中为每个Bean都设置一个代办署理,那末设置文件的保护就成了贫苦。为此,Spring供应了对照便利的办法办理这个成绩,好比BeanNameAutoProxyCreator、DefaultAdviceAutoProxyCreator和metadataautoproxying。我们接纳了BeanNameAutoProxyCreator,由于他对照直不雅和复杂。











设置以下:







<beanid=”beanNameAutoProxyCreator”class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>



<propertyname=’beanNames”>



<list>



<value>*Service</value>



</list>



</property>



<propertyname=”interceptorNames”>



<value>throwsAdvice</value>



</property>



</bean>







从中我们能够看到,一切以Service开头的bean城市由Spring主动创立代办署理,从而完成Advice的织进。



其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:

若天明 发表于 2015-1-21 15:14:39

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

小女巫 发表于 2015-1-24 15:08:34

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

老尸 发表于 2015-2-1 17:17:18

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

飘灵儿 发表于 2015-2-7 11:00:21

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

透明 发表于 2015-2-21 19:17:23

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

admin 发表于 2015-3-6 20:57:25

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

谁可相欹 发表于 2015-3-8 00:46:19

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

不帅 发表于 2015-3-9 17:43:55

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

灵魂腐蚀 发表于 2015-3-11 14:48:23

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

蒙在股里 发表于 2015-3-11 21:23:54

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

金色的骷髅 发表于 2015-3-13 08:06:12

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

深爱那片海 发表于 2015-3-23 22:32:37

是一种使网页(Web Page)产生生动活泼画面的语言

柔情似水 发表于 2015-3-24 15:22:09

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

分手快乐 发表于 2015-3-27 21:01:31

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

兰色精灵 发表于 2015-4-17 19:40:29

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

只想知道 发表于 2015-4-19 21:15:38

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

爱飞 发表于 2015-4-28 12:23:04

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

因胸联盟 发表于 2015-5-6 01:41:29

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
页: [1]
查看完整版本: JAVA编程:Spring AOP之ThrowsAdvice