预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

讲解Java的Spring框架中的AOP实现 简介面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。除了类(classes)以外,AOP提供了切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。(这些关注点术语通常称作横切(crosscutting)关注点。)Spring的一个关键的组件就是AOP框架。尽管如此,SpringIoC容器并不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得SpringIoC容器更加完善。Spring2.0AOP:Spring2.0引入了一种更加简单并且更强大的方式来自定义切面,用户可以选择使用基于模式(schema-based)的方式或者使用@AspectJ注解。对于新的应用程序,如果用户使用Java5开发,我们推荐用户使用@AspectJ风格,否则可以使用基于模式的风格。这两种风格都完全支持通知(Advice)类型和AspectJ的.切入点语言,虽然实际上仍然使用SpringAOP进行织入(Weaving)。本章主要讨论Spring2.0对基于模式和基于@AspectJ的AOP支持。Spring2.0完全保留了对Spring1.2的向下兼容性,下一章将讨论Spring1.2API所提供的底层的AOP支持。Spring中所使用的AOP:提供声明式企业服务,特别是为了替代EJB声明式服务。最重要的服务是声明性事务管理(declarativetransactionmanagement),这个服务建立在Spring的抽象事务管理(transactionabstraction)之上。允许用户实现自定义的切面,用AOP来完善OOP的使用。实例我们经常会用到的有如下几种1、基于代理的AOP2、纯简单java对象切面3、@Aspect注解形式的4、注入形式的Aspcet切面下面我们就一个一个来应用吧.下面先写一下几个基本的类。接口类:/***定义一个接口*/publicinterfaceSleepable{/***睡觉方法*/voidsleep();}实现类:/***本人实现睡觉接口*/publicclassChenLliNaimplementsSleepable{@Overridepublicvoidsleep(){//TODOAuto-generatedmethodstubSystem.out.println("乖,该睡觉了!");}}增强类:/***定义一个睡眠的增强同时实现前置和后置*/publicclassSleepHelperimplementsMethodBeforeAdvice,AfterReturningAdvice{@OverridepublicvoidafterReturning(ObjectreturnValue,Methodmethod,Object[]args,Objecttarget)throwsThrowable{System.out.println("睡觉前要敷面膜");}@Overridepublicvoidbefore(Methodmethod,Object[]args,Objecttarget)throwsThrowable{System.out.println("睡觉后要做美梦");}}一、基于代理的AOP如配置文件中:pattern属性指定了正则表达式,他匹配所有的sleep方法使用org.springframework.aop.support.DefaultPointcutAdvisor的目的是为了使切点和增强结合起来形成一个完整的切面最后配置完后通过org.springframework.aop.framework.ProxyFactoryBean产生一个最终的代理对象。二、纯简单java对象切面纯简单java对象切面这话怎么说呢,在我看来就是相对于第一种配置,不需要使用代理,,而是通过spring的内部机制去自动扫描,这时候我们的配置文件就该如下修改:是不是相对于第一种简单了许多,不用再去配置代理了。三、@Aspect注解形式根据我们的经验也知道,注解的形式相对于配置文件是简单一些的,这时候需要在已有的方法或类上家注解:/***通过注解的方式添加增强*/@Aspect@ComponentpublicclassSleepHelper03{/*@Pointcut("execution(*com.tgb.springaop.service.impl..*(..))")*/@Pointcut("execution(**.sleep(..))")publicvoidsleeppoint(){}@Before("sleeppoint()")publicvoidbefo