简介

上文已经提到了Spring AOP的概念以及简单的静态代理、动态代理简单示例,链接地址:https://www.cnblogs.com/chenzhaoren/p/9959596.html

本文将介绍Spring AOP的常用注解以及注解形式实现动态代理的简单示例。

常用注解

@aspect:定义切面

@pointcut:定义切点

@Before:前置通知,在方法执行之前执行

@After:后置通知,在方法执行之后执行

@AfterRunning:返回通知,在方法返回结果之后执行

@AfterThrowing:异常通知,在方法抛出异常之后执行

@Around:环绕通知,围绕着方法执行

启动Spring AOP注解自动代理

1. 在 classpath 下包含 AspectJ 类库:aopalliance.jar、aspectj.weaver.jar 和 spring-aspects.jar

2. 将 aop Schema 添加到 Bean 配置文件 <beans> 根元素中。

3. 在 Bean 配置文件中定义一个空的 XML 元素 <aop:aspectj-autoproxy proxy-target-class="true"/>

(当 Spring IOC 容器检测到 Bean配置文件中的<aop:aspectj-autoproxy proxy-target-class="true"/> 元素时,会自动为与 AspectJ 切面匹配的 Bean 创建代理。)

代码示例

1. 定义被代理类接口

packege com.czr.aop.model;public interface superMan{//自我介绍public void introduce();
}

2. 定义被代理类

packege com.czr.aop.model;
@Component("superMan")
public class SuperManImpl implements SuperMan {@overridepublic void introduce(){System.out.println("我是内裤外穿的超人!!!");}} 

3. 定义切点类

package com.czr.aop;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;@Component("annotationAop")
@Aspect
public class AnnotationAop {//定义切点@Pointcut("execution(* com.czr.aop.model.*(..))")public void pointCutName(){}@Before("pointCutName()")public void beforeAdvice(){System.out.println("*注解前置通知实现*");}//后置通知@After("pointCutName()")public void afterAdvice(){System.out.println("*注解后置通知实现*");}//环绕通知。ProceedingJoinPoint参数必须传入。@Around("pointCutName()")public void aroudAdvice(ProceedingJoinPoint pjp) throws Throwable{System.out.println("*注解环绕通知实现 - 环绕前*");pjp.proceed();//执行方法System.out.println("*注解环绕通知实现 - 环绕后*");}
}            

4. 定义Spring文件aop.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="com.czr.aop,com.czr.aop.model"/><!-- 开启aop注解方式 --><aop:aspectj-autoproxy/>
</beans>

5. 定义测试类

package com.czr.aop;public class Test {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("aop.xml");SuperMan sm= (SuperMan)ctx.getBean("superMan");sm.introduce();}}

6. 输出结果

*注解环绕通知实现 - 环绕前*
*注解前置通知实现*
我是内裤外穿的超人!!!
*注解环绕通知实现 - 环绕后*
*注解后置通知实现*

转载于:https://www.cnblogs.com/chenzhaoren/p/9961011.html

Spring AOP注解方式实现相关推荐

  1. Spring AOP注解方式实现日志管理

    文章目录 自定义注解 BussLog BussLogAspect 前言:使用注解方式实现日志管理,可以使我们的程序变的清晰.简单,不和很多业务代码混在一起. 实现思路大致分为四点 设计日志表和日志类, ...

  2. 第五章 Spring进阶-注解方式实现AOP(1)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 徒弟:师傅,我 ...

  3. (转)使用Spring的注解方式实现AOP的细节

    http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...

  4. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  5. Spring AOP注解为什么失效?90%Java程序员不知道

    转载自 Spring AOP注解为什么失效?90%Java程序员不知道 使用Spring Aop注解的时候,如@Transactional, @Cacheable等注解一般需要在类方法第一个入口的地方 ...

  6. java spring aop 注解包_Spring AOP 注解配置实例

    Spring AOP注解例子 一:导入相关jar包. 首先导入Spring的相关包(这里就不多说了,我这里是3.2.4版本的) 然后导入AOP注解的相关包(不是spring的包)aspectjrt-1 ...

  7. spring AOP注解失效原因

    目录 @Transactional @Async等注解不起作用 JDK动态代理 Spring AOP注解失效原因及解决 原因1:同一个类中,方法A调用方法B(方法B上加有注解),注解无效 原因2:AO ...

  8. spring aop 注解

    spring Aop 注解 Aop 术语 AOP 的特性术语,不同的翻译还会不一样,得在过程中理解 横切关注点:跨越程序多个模块的方法或功能.即与业务逻辑无关,但我们也要关注的部分,就是横切关注点.如 ...

  9. Spring 使用注解方式进行事物管理

    Spring 使用注解方式进行事物管理 大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅. 事物注解方式: @Transaction ...

最新文章

  1. 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构
  2. Python3中global/nonlocal用法
  3. 企业级 SpringBoot 教程 (十二)springboot集成apidoc
  4. Aurora HDR 2019中文版
  5. Springboot 配置类( @Configuration) 不能使用@Value注解从application.propertyes中加载值以及Environment为null解决方案
  6. 计算机怎么调整显示英语翻译,翻译词汇:计算机显示英语词汇 口译词汇
  7. mysql中没having_MySQL中无GROUP BY直接HAVING的问题
  8. iOS传感器开发——为APP添加手机密码、指纹进行安全验证
  9. Jasmine基础API
  10. 指针式万用表测量电容
  11. 易掌管-计件工资系统免费登记派送中
  12. 编程题涉及到的数学公式(持续更新……)
  13. 生信学习入门常见错误可能的原因分类总结和求助指南
  14. 纯电动汽车快慢充原理介绍
  15. python处理图片去白底-Python实现将蓝底照片转化为白底照片功能完整实例
  16. 生物信息_odds_ratios、Likelihood_Ratios、发病率、frequency
  17. spyder pyecharts不显示_后期剪辑还在升级主机配置?换台京东方显示器才最重要...
  18. HTML+CSS 模拟QQ邮箱登录界面
  19. 盲信号分离的实际应用
  20. Linux入门---基本指令(下)

热门文章

  1. Matlab 卷积函数 ——conv2
  2. 变压器耦合和电容耦合_超越变压器和抱抱面的分类
  3. 南加州大学机器视觉实验室_机器学习带动南加州爱迪生的变革
  4. python 降噪_使用降噪自动编码器重建损坏的数据(Python代码)
  5. 为什么和平精英无响应_什么和为什么
  6. 我从未看过荒原写作背景_您从未听说过的最佳数据科学认证
  7. 内核中引发bug并打印信息
  8. 200万存银行理财,年利率5%,未来30年够养老了吗?
  9. c语言大作业旋转,c语言大作业全-20210412035629.docx-原创力文档
  10. access找不到输入表或者dual_在Access窗体中显示指定路径的图片