前面介绍了下Spring中的切面技术。如今说下採用注解的方式进行切面

首先肯定和之前的一样。须要一个自己主动代理的注解类 AnnotationAwareAspectJAutoProxyCreator

配置文件里的代码:

<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <bean id="person" class="cn.aop.aspectj2.Person"></bean> <!-- 自己主动代理注解 <span style="font-family: Arial, Helvetica, sans-serif;">自己主动去查找带有注解的类和方法,和之前的那个自己主动代理类差点儿相同,原理大概是遍历全部的带注解的类,然后进行一一解析。。</span> <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"></bean> --> <!-- 注解自己主动标签,自己主动去查找带有注解的类和方法 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> <!-- 注解的切面 须要自己写的切面了===切点+ 通知 在该类中相对之前,比較简单些--> <bean class="cn.aop.aspectj2.MyAdvisor"></bean> </beans>

在配置文件里,我们不难发现,最基本都是 一个被代理的对象。自己主动代理类,切面(能够是自己写的类,这个注解就是自己写的,当然在之前的那个就是用aop里面的)。我们须要写一个自己的切面类

切面类

package cn.aop.aspectj2;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;@Aspect
public class MyAdvisor {private final String CUT="execution(* cn.aop.aspectj2.*.*(..))";/** 在核心代码之前运行*/@Before(CUT)public void advice(){System.out.println("单独之前拦拦");}/** 在核心代码之后运行,正常退出或者异常都会调用这个*/@After(CUT)public void advice2(){System.out.println("单独之后拦拦");}/** around通知最好不用(能够用before+after来取代),由于參数依赖---但也有优点。* 就是获得被拦截对象和对应方法的信息*/@Around(CUT)public void around(ProceedingJoinPoint p) throws Throwable{System.out.println("这是围绕前 "+p.getKind()+","+p.getTarget());p.proceed();System.out.println("围绕后");}/** 是针对某一个函数* 在前面函数运行完毕之后,这个才会运行,* 可是方法中当出现异常之后,这个就不会运行的,正常退出才会运行*/@AfterReturning(CUT)public void afterR(JoinPoint jp ){System.out.println("全部之后"+jp.getKind());}@AfterReturning(CUT)public void after2(){System.out.println("全部之后222");}/** 这个在出现异常之后调用。前提是==------前面的代码没有抓住这个异常,* 前面抓异常之后。这里是不会调用的,一般在日志里面用的比較多。* */@AfterThrowing(CUT)public void throwex() throws Exception{System.out.println("出异常了");}}

person类

package cn.aop.aspectj2;public class Person {public void say(){//            Integer.parseInt("aa");//測试是否出异常System.out.println("...这是say..");}public void run(){System.out.println("这是person中的 run方法");}}

測试类

public class Demo2 {@Testpublic void test(){//相同的从容器中拿到配置文件,取出对象ApplicationContext app = new ClassPathXmlApplicationContext("cn/aop/aspectj2/aspectj2.xml");Person p=app.getBean(Person.class);p.run();p.say();}
}

转载于:https://www.cnblogs.com/gavanwanggw/p/6964701.html

javaEE之------Spring-----》 AspectJ注解相关推荐

  1. 面向切面(AOP)之Spring接口方式 schema配置方式 aspectj注解方式

    一.初识AOP   关于AOP的学习可以参看帮助文档:spring-3.2.0.M2\docs\reference\html目录下index.html的相关章节      1.AOP:Aspect-O ...

  2. Spring Aop实例之AspectJ注解配置

    上篇博文<Spring Aop实例之xml配置>中,讲解了xml配置方式,今天来说说AspectJ注解方式去配置spring aop. 依旧采用的jdk代理,接口和实现类代码请参考上篇博文 ...

  3. Spring AOP编程-aspectJ注解开发

    1.编写目标 public interface ICustomerService {public void save();public void search();public int update( ...

  4. Spring Aop(四)——基于Aspectj注解的Advice介绍

    4 基于Aspectj注解的Advice介绍 之前介绍过,Advice一共有五种类型,分别是before.after return.after throwing.after(finally)和arou ...

  5. 【Spring 基础注解】对象创建相关注解、注入相关注解、注解扫描详解

    Spring 基础注解(2.x) 注解基础概念 注解的作用 Spring 注解的发展历程 对象创建相关注解 @Component @Repository.@Service.@Contoller @Sc ...

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

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

  7. Spring基于注解的AOP配置

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  8. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方 1.form的enctype="multipart/form-data" 这个是上传文件必须的 2.appl ...

  9. JavaSE、JavaEE与Spring的概念和异同点剖析

    JavaSE.JavaEE与Spring的概念和异同点剖析 什么是JavaSE JavaSE是Java的核心,也就是 Java的主要部分.用于开发桌面应用程序和基于web的应用程序.它提供了从基本对象 ...

最新文章

  1. 矩阵分析与多元统计II 二次型与二次曲面3 二次型及其标准形的定义
  2. 强推!十大顶级大数据可视化工具 | 程序员硬核评测
  3. 【youcans 的 OpenCV 例程200篇】144. 基于灰度形态学的纹理分割
  4. 数据结构与算法分析(四)——C++实现栈
  5. 数独基本规则_思维训练|数独入门第五课:唯余解法
  6. 851. 喧闹和富有
  7. houdini 做选点效果
  8. UVA-11491 Erasing and Winning (单调队列)
  9. 页面打开自动触发onlick事件
  10. 机器学习之分类器——Matlab中各种分类器的使用总结(随机森林、支持向量机、K近邻分类器、朴素贝叶斯等)
  11. 程序人生:不知道我讲了什么的回应稿
  12. Microsoft C++ 异常: std::length_error,位于内存位置 0x000000AF9B7AF810 处
  13. FIsh论坛《零基础入门学习Python》| 第012讲 课后测试题及答案
  14. lucas–kanade_Lucas–Kanade光流算法学习
  15. 法院判错案如何追责?
  16. 体验国际编程大赛(完成报名可抽奖)
  17. 完成领导交代的任务并及时反馈,才叫真的完成任务
  18. 入门机器学习 21 天后 , 高薪 Offer 就在眼前
  19. 我的物联网项目(五)下单渠道
  20. c语言编码数字的范围,C语言数据类型的表示范围

热门文章

  1. 还在用Spring Security?推荐你一款使用简单、功能强大的权限认证框架
  2. 另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate?
  3. 从CPU缓存看缓存的套路
  4. 蓝色梦想,再次起航 | 水下目标检测算法比赛正式开赛!
  5. 超详细配置教程,搭建 Windows 深度学习环境
  6. LSTM终获「正名」,IEEE 2021神经网络先驱奖授予LSTM提出者Sepp Hochreiter
  7. 太赞!639 页《深度学习:Deep Learning》硬核课程 PPT 下载
  8. CVPR 2020满分论文 | FineGym:面向细粒度动作分析的层级化高质量数据集
  9. 太赞了:中文版开源!这或许是最经典的计算机编程教材
  10. 推荐一位Python终生学习者!本科期间用Python赚了10w+!