Spring实战4之AOP篇
来源:互联网 发布:it服务外包是什么 编辑:程序博客网 时间:2024/06/05 10:51
切面实现了横切关注点(跨多个应用对象的逻辑)的模块化,面向切面编程使得应用对象只用关注自己的业务逻辑实现,而不需要关注共通的例如,日志、事物、缓存等功能。
一、使用注解创建切面
1.定义切面
/** * 观众类,定义为切面类 * @author shier * */@Aspectpublic class Audience { /* * 定义命名的切点 */ @Pointcut("execution(** concert.Performance.perform(..))") public void performance(){} /* * 定义前置通知 */ @Before("performance()") public void silenceCellPhones(){ System.out.println("停止打电话"); } /* * 定义后置通知 */ @AfterReturning("performance()") public void takeSeats(){ System.out.println("鼓掌"); } /* * 定义异常通知 */ @AfterThrowing("performance()") public void demandRefund(){ System.out.println("退票"); } /* * 定义环绕通知 */ @Around("performance()") public void watchPerformance(ProceedingJoinPoint jp){ try { System.out.println("停止打电话"); System.out.println("鼓掌"); jp.proceed(); System.out.println("clap!clap!clap!"); } catch (Throwable e) { System.out.println("退票"); } }}
2.启用自动代理功能
(1)使用javaConfig方式@EnableAspectJAutoProxy注解启用自动代理功能
@Configuration@EnableAspectJAutoProxy@ComponentScanpublic class AudienceConfig { @Bean public Audience audience(){ return new Audience(); }}
(2)使用XML启用自动代理功能
<?xml version="1.1" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <aop:aspectj-autoproxy proxy-target-class="true"/></beans>
3.通过注解引入新功能
@Aspectpublic class EncoreableIntroducer { /** * @DeclareParents注解指明了要引入的接口Encoreable, * value表明哪种类型的bean要引入该接口Performmance的所有子类型, * defaultImpl指定引入功能提供的实现类DefaultEncoreable */ @DeclareParents(value="concert.Performmance+",defaultImpl=DefaultEncoreable.class) public static Encoreable encoreable;}
二、在XML中声明切面
<bean id="showService" class="cn.com.ztz.spring.service.ShowServiceImpl"/> <bean id="audienceAspect" class="cn.com.ztz.spring.service.AudienceAspect"/> <aop:config> <aop:aspect ref="audienceAspect" > <aop:before pointcut="execution(* cn.com.ztz.spring.service.ShowServiceImpl.*(..)) and args(param)" method="taskSeats(java.lang.String)" arg-names="param"/> </aop:aspect> </aop:config>
阅读全文
0 0
- Spring实战4之AOP篇
- 彻底征服 Spring AOP 之 实战篇
- 彻底征服 Spring AOP 之 实战篇
- 彻底征服 Spring AOP 之 实战篇
- 彻底征服 Spring AOP 之 实战篇
- 实战Spring中AOP
- Spring AOP 实战运用
- Spring AOP实战讲解
- 【Spring实战】----解析Spring AOP
- 【Spring实战】----解析Spring AOP
- Java Web实战06--Spring之AOP使用
- Spring aop 实战与详解
- Spring之Spring AOP
- spring实战4之容器篇
- Spring实战4之高级配置篇
- Spring实战4之SpringMVC篇
- Spring实战4之SpringMVC高级篇
- Spring实战4之数据源篇
- vue全家桶系列2-webpack+es6
- Oracle查询数据表结构(字段,类型,大小,备注)
- 1027 大数乘法
- 互联网风雨十年,我所经历的技术变迁
- Merged Manifest官方文档
- Spring实战4之AOP篇
- 自定义taglib标签使用过程中报500
- 有关软件测试的问答(转)
- Mysql 分页查询
- iOS侧滑返回
- C# 关键字之 decimal
- MySQL总结
- Android常见面试题
- 01 ffmpeg对摄像头的调用编程