1. 案例结构

2. 配置文件applicationContext.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:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
">    <!-- 用注解的方式启用AOP --><aop:aspectj-autoproxy proxy-target-class="true"/><!--扫描MyAspect --><context:component-scan base-package="com.zhq.aspect"/><!--生成一个MyCalc --><bean class="com.zhq.aspect.MyCalc"/>
</beans>

2. 其他类

package com.zhq.aspect;import java.util.Arrays;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/*** 切面类,存放切面* */
@Aspect
@Component//可以扫描
@Order(2)//执行顺序
public class MyAspect {//通告,用于织入到某个指定的切入点。@Before表示此切面是一个前置通知,它会在方法执行前执行。@Before("execution(* com.zhq.aspect.MyCalc.*(..))")public void beFore(JoinPoint jp) {//取所有参数Object args[]=jp.getArgs();//获取方法名String name=jp.getSignature().getName();System.out.println(name+"方法准备执行...");System.out.println("输入参数:"+Arrays.toString(args));}@After("execution(* com.zhq.aspect.MyCalc.*(..))")public void beAfter() {System.out.println("方法执行结束。");}//返回通知@AfterReturning(value="execution(* com.zhq.aspect.MyCalc.*(..))",returning="r")public void afterReturning(JoinPoint jp,Object r) {//获取方法名String name=jp.getSignature().getName();System.out.println(name+"开始返回结果...");System.out.println("结果是:"+r);}//异常通知@AfterThrowing("execution(* com.zhq.aspect.MyCalc.*(..))")public void afterThrowing(JoinPoint jp) {//获取方法名String name=jp.getSignature().getName();System.out.println(name+"出现异常...");}
}
package com.zhq.aspect;public class MyCalc {//连接点,织入点public int add(int a,int b) {return a+b;}public int div(int a,int b) {return a-b;}public int chu(int a,int b) {return a/b;}
}
package com.zhq.aspect;import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;/*** 切面类,存放切面* */
@Aspect
@Component//可以扫描
@Order(1)//执行顺序
public class MyLoggin {@Before("execution(* com.zhq.aspect.MyCalc.*(..))")public void beginLoggin() {System.out.println("开始日志....");}}
package com.zhq.aspect;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {ApplicationContext cxt=new ClassPathXmlApplicationContext("config/applicationContext.xml");MyCalc ca=(MyCalc) cxt.getBean(MyCalc.class);//普通测试System.out.println(ca.add(10, 20));System.out.println(ca.div(10, 20));//异常测试System.out.println(ca.chu(10,0));}}

3. 测试效果

Spring关于AOP配置举例(注解方式)相关推荐

  1. spring的AOP配置之@注解方式

    AOP配置(注解) spring的AOP概念在spring的AOP配置之XML方式这骗博客中详细介绍了,这篇博客就直接开始介绍AOP配置需要那些注解 AOP注解详解 @Aspect 标志为一个切面类 ...

  2. spring的AOP配置之XML方式

    AOP概念 ⚫ AOP(Aspect Oriented Programing)面向切面编程,一种编程范式,隶属于软工范畴,指导开发者如 何组织程序结构 ⚫ AOP弥补了OOP的不足,基于OOP基础之上 ...

  3. 【Spring】配置事务 注解方式与非注解方式

    Spring的事务配置非注解方式 <!--通知--><tx:advice id="txAdvice" transaction-manager="txTr ...

  4. spring注入的几种方式(文件配置以及注解方式)

    前言 spring利用IOC(控制反转)机制,将创建对象的权利交给了spring框架,从而降低程序的耦合.spring有文件配置和注解两种策略来实现Bean对象的创建和注入,这两种方式可以相互代替,后 ...

  5. Spring实现AOP的4种方式

    Spring实现AOP的4种方式 先了解AOP的相关术语: 1.通知(Advice): 通知定义了切面是什么以及何时使用.描述了切面要完成的工作和何时需要执行这个工作. 2.连接点(Joinpoint ...

  6. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

  7. SSM框架笔记07:初探Spring——采用XML配置文件与注解方式

    初探Spring--采用XML配置文件与注解方式   在上一讲的项目基础上继续.   1.将xmlconfig包里的两个骑士类和两个任务类拷贝到xml_annotation包 2.修改SlayDrag ...

  8. Spring学习笔记4,注解方式管理Bean

    Spring框架的Bean管理注解方式的快速入门 1. 步骤一:下载Spring框架的开发包 解压后的目录结构如下 * docs – API和开发规范 * libs – jar包和源码      Sp ...

  9. 初步学习Spring Aop使用之注解方式

    前言: 这里就主要演示Spring中Aop使用注解是怎么使用,如果需要了解更多Aop相关概念,可查看相关资料的介绍 一.项目目录 [标记文件为主要文件] 二.各个文件的代码 AopServer.jav ...

  10. 使用Spring实现AOP的三种方式

    [重点] 使用AOP织入 需要导入一个依赖包 <dependencies><dependency><groupId>org.aspectj</groupId& ...

最新文章

  1. webfocus在移动终端上的应用DEMO
  2. S1系统相关-uptime命令总结(S代表系统相关,1代表第一个命令)
  3. reactjs 兄弟通信,父子通信
  4. 利用线程池为线程创建一个守护线程
  5. 设计模式之_Strategy_01
  6. 《犯罪心理学》读书笔记(part3)--影响犯罪心理形成发展的外部因素
  7. android 什么是9.png
  8. 里程碑 .Net7再更新,从此彻底碾压Java!
  9. .Net Core 2.1 通用主机(Core 在控制台应用程序中的应用)
  10. Linux笔记-shell脚本中加载环境变量(适用于crontab)
  11. MySQL VARCHAR的说明信息
  12. ubuntu /etc/profile和/etc/environment的比较
  13. Android studio的gradle教程整理
  14. vscode安装使用教程
  15. 评职称自费出书多少钱
  16. vue项目中常用解决跨域的方法
  17. 刀塔霸业怎么在电脑上玩 刀塔霸业电脑版玩法教程
  18. Python用socket、多线程实现一对一聊天室
  19. 简体字与繁体字互相转换
  20. php 算生存曲线,生存曲线(三):统计分析方法这么多,到底选哪个?

热门文章

  1. PocketPC中汉字输入法分析与实现(…
  2. 淘宝大数据,打假新武器
  3. 随风轻逝--感悟2005
  4. 使用puppet自动化升级安全程序
  5. 手写个Tomcat雏型
  6. GetType obsolete
  7. flutter中的点击事件
  8. 360企业版的IT管理价值
  9. 西游记中文殊菩萨的坐骑青狮两次下界为妖
  10. 跟青翼一起学Qt4编程系列 之 2-1标准对话框