|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。AOP作为Spring这个轻量级的容器中很主要的一部分,失掉愈来愈多的存眷,Spring的Transaction就是用AOP来办理的,明天就经由过程复杂的例子来看看Spring中的AOP的基础利用办法。起首断定将要Proxy的方针,在Spring中默许接纳JDK中的dynamicproxy,它只可以完成接口的代办署理,假如想对类举行代办署理的话,必要接纳CGLIB的proxy。明显,选择“编程到接口”是更明智的做法,上面是将要代办署理的接口:publicinterfaceFooInterface{publicvoidprintFoo();publicvoiddummyFoo();}和其一个复杂的完成:publicclassFooImplimplementsFooInterface{publicvoidprintFoo(){System.out.println("InFooImpl.printFoo");}publicvoiddummyFoo(){System.out.println("InFooImpl.dummyFoo");}}接上去创立一个Advice,在Spring中撑持Around,Before,Afterreturning和Throws四种Advice,这里就以复杂的BeforeAdvice举例:publicclassPrintBeforeAdviceimplementsMethodBeforeAdvice{publicvoidbefore(Methodarg0,Object[]arg1,Objectarg2)throwsThrowable{System.out.println("InPrintBeforeAdvice");}}有了本人的businessinterface和advice,剩下的就是怎样往拆卸它们了,起首使用ProxyFactory以编程体例完成,以下:publicclassAopTestMain{publicstaticvoidmain(String[]args){FooImplfooImpl=newFooImpl();PrintBeforeAdvicemyAdvice=newPrintBeforeAdvice();ProxyFactoryfactory=newProxyFactory(fooImpl);factory.addBeforeAdvice(myAdvice);FooInterfacemyInterface=(FooInterface)factory.getProxy();myInterface.printFoo();myInterface.dummyFoo();}}如今实行程序,奇妙的了局就呈现了:InPrintBeforeAdviceInFooImpl.printFooInPrintBeforeAdviceInFooImpl.dummyFoo固然如许能体味到Spring中AOP的用法,但这决不是值得保举的办法,既然利用了Spring,在ApplicationContext中拆卸所必要的bean才是最好战略,完成下面的功效只必要写个复杂的applicationContext就能够了,以下:Theaopapplicationcontext
FooInterface
myAdvice
固然,main中的代码也要举行响应的修正:publicstaticvoidmain(String[]args){ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");FooInterfacefoo=(FooInterface)context.getBean("foo");foo.printFoo();foo.dummyFoo();}如今运转一下,了局将和下面的运转了局完整一样,如许是否是更文雅?当必要变动完成时,只必要修正设置文件就能够了,程序中的代码不需任何修改。可是,这时候候会发明被proxy的object中的一切办法挪用时都将运转advice中的before,这明显不克不及满意尽年夜多半情形下的必要,此时,只需借用Advisor就能够了,固然要在Advisor中使用pattern设置好哪些办法必要advice,变动applicationContext以下:Thespringevaapplicationcontext
.*print.*
FooInterface
myAdvisor
主程序不需举行任何修正,运转了局已变样了:InPrintBeforeAdviceInFooImpl.printFooInFooImpl.dummyFoo至此,应当已了解了Spring中AOP的利用办法,固然Spring中AOP最主要的使用是TransactionManager,举个这方面的applicationContext例子看看:
/WEB-INF/jdbc.properties
${jdbc.driverClassName}
${jdbc.url}
${jdbc.username}
${jdbc.password}
smartmenu.hbm.xml
${hibernate.dialect}
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED,readOnly
嗯,要想完全了解Spring的AOP,最好仍是多看看源码,开源就是好啊!
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。 |
|