1、关于配置文件

首先在因为要使用到扫描功能,所以xml的头文件中除了引入bean和aop之外,还要引入context才行:
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> ... </beans>
x
11
 
1
<?xml version="1.0" encoding="UTF-8"?>
2
<beans xmlns="http://www.springframework.org/schema/beans"
3
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
       xmlns:context="http://www.springframework.org/schema/context"
5
       xmlns:aop="http://www.springframework.org/schema/aop"
6
       xsi:schemaLocation="http://www.springframework.org/schema/beans
7
       http://www.springframework.org/schema/beans/spring-beans.xsd
8
       http://www.springframework.org/schema/aop
9
       http://www.springframework.org/schema/aop/spring-aop.xsd
10
       http://www.springframework.org/schema/context
11
       http://www.springframework.org/schema/context/spring-context.xsd">
12
    
13
    ...
14
    
15
</beans>    

既然使用注解,那么在配置文件中需要开启扫描配置以注册bean组件;同时Spring中使用了aspectj包的@Aspect注解标注当前组件为切面,所以同时还需要在配置文件中配置实用aspectj的自动代理模式。如下:
<!-- 开启bean组件扫描 -->
<context:component-scan base-package="dulk.learn"></context:component-scan>
<!-- 启用自动代理 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
1
 
1
<!-- 开启bean组件扫描 -->
2
<context:component-scan base-package="dulk.learn"></context:component-scan>
3
<!-- 启用自动代理 -->
4
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

2、AOP的注解配置

AOP的注解配置方式,对于一个类来说:
  • 通过 @Component 声明该类为bean组件
  • 通过 @Aspect 标记该类为切面
  • 通过注解说明类中函数的通知类型

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.springframework.stereotype.Component; @Component
@Aspect
public class Section { @Before("execution(* dulk.learn..*.*(..))")
public void doBefore(JoinPoint point) {
System.out.println("doBefore");
} @AfterReturning(pointcut = "execution(* dulk.learn..*.*(..))", returning = "ret")
public void doAfterReturning(JoinPoint point, Object ret) {
System.out.println("doAfterReturning");
System.out.println("The returning obj is " + ret);
} @AfterThrowing(pointcut = "execution(* dulk.learn..*.*(..))", throwing = "e")
public void doThrow(JoinPoint point, Throwable e) {
System.out.println("doThrow");
} @After("execution(* dulk.learn..*.*(..))")
public void doAfter() {
System.out.println("doAfter");
} @Around("execution(* dulk.learn..*.*(..))")
public void doAround(ProceedingJoinPoint point) {
System.out.println("doAround-dobefore");
try {
Object obj = point.proceed();
System.out.println("doAround-doAfterReturning");
} catch (Throwable throwable) {
System.out.println("doAround-doThrow");
}
System.out.println("doAround-doAfter");
} }
x
1
49
 
1
import org.aspectj.lang.JoinPoint;
2
import org.aspectj.lang.ProceedingJoinPoint;
3
import org.aspectj.lang.annotation.After;
4
import org.aspectj.lang.annotation.AfterReturning;
5
import org.aspectj.lang.annotation.AfterThrowing;
6
import org.aspectj.lang.annotation.Around;
7
import org.aspectj.lang.annotation.Aspect;
8
import org.aspectj.lang.annotation.Before;
9
import org.springframework.stereotype.Component;
10

11

12
@Component
13
@Aspect
14
public class Section {
15

16
    @Before("execution(* dulk.learn..*.*(..))")
17
    public void doBefore(JoinPoint point) {
18
        System.out.println("doBefore");
19
    }
20

21
    @AfterReturning(pointcut = "execution(* dulk.learn..*.*(..))", returning = "ret")
22
    public void doAfterReturning(JoinPoint point, Object ret) {
23
        System.out.println("doAfterReturning");
24
        System.out.println("The returning obj is " + ret);
25
    }
26

27
    @AfterThrowing(pointcut = "execution(* dulk.learn..*.*(..))", throwing = "e")
28
    public void doThrow(JoinPoint point, Throwable e) {
29
        System.out.println("doThrow");
30
    }
31

32
    @After("execution(* dulk.learn..*.*(..))")
33
    public void doAfter() {
34
        System.out.println("doAfter");
35
    }
36

37
    @Around("execution(* dulk.learn..*.*(..))")
38
    public void doAround(ProceedingJoinPoint point) {
39
        System.out.println("doAround-dobefore");
40
        try {
41
            Object obj = point.proceed();
42
            System.out.println("doAround-doAfterReturning");
43
        } catch (Throwable throwable) {
44
            System.out.println("doAround-doThrow");
45
        }
46
        System.out.println("doAround-doAfter");
47
    }
48

49
}


[10] AOP的注解配置的更多相关文章

  1. Spring之AOP的注解配置

    配置过程可以简单的分为3步: 1,业务类配置 在业务类前加入,将业务类交由Spring管理 @Component("s") 这个表示,这个业务类的Bean名字为 s . 2,将切点 ...

  2. spring的aop的注解配置

    一.使用注解的方式配置后置通知 第一步,创建通知类LogAdvice 第二步,要在spring主配置文件中声明以注解的方式配置spring aop  第三步,测试 二.其他异常配置 package c ...

  3. Spring 使用AOP——基于注解配置

    首先,使用注解实现AOP是基于AspectJ方式的. 创建包含切点方法的类 package cn.ganlixin.test; import org.aspectj.lang.annotation.P ...

  4. Spring的AOP机制---- AOP的注解配置---- AOP的注解配置

    3333隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢 ...

  5. 【Spring五】AOP之使用注解配置

    AOP使用注解配置流程: 1.当spring容器启动时候.    < context:component- scan base-package= "cn.itheima03.sprin ...

  6. Spring AOP的注解方式实现

    spring也支持注解方式实现AOP,相对于配置文件方式,注解配置更加的轻量级,配置.修改更加方便. 1.开启AOP的注解配置方式 <!-- 开启aop属性注解 --> <aop:a ...

  7. Spring(十五):通过注解配置 Bean

    在ClassPath中扫描组件 1)组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件: 2)特定组件包含: --- @C ...

  8. Spring AOP及事务配置三种模式详解

    Spring AOP简述 Spring AOP的设计思想,就是通过动态代理,在运行期对需要使用的业务逻辑方法进行增强. 使用场景如:日志打印.权限.事务控制等. 默认情况下,Spring会根据被代理的 ...

  9. Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

    本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...

随机推荐

  1. extract-text-webpack-plugin 作用、安装、使用

    作用:该插件的主要是为了抽离css样式,防止将样式打包在js中引起页面样式加载错乱的现象 安装:插件安装命令如下: npm install extract-text-webpack-plugin -- ...

  2. [笔记] imooc《JavaScript深入浅出》对象与函数

    懒得做草稿了,习惯md也懒得扔印象笔记 主要是之前没去接触这一部分,就随手记下来了 创建对象的方法 对象字面量 new构造器/原型链 Object.create() 属性操作 属性读写(以及读写异常. ...

  3. 电脑黑屏,提示信息:windows 无法验证此文件的数字签名。

    前言 前几天,在群聊里,有个发小@我,发了张截图,说电脑打不开机了,黑屏,说什么windows 无法验证此文件的数字签名.我当时发了个纠结的表情,意思是我不是专业修电脑的,为什么问我啊.她说怎么了,好 ...

  4. 转载--tomcat调优

    转载  https://www.cnblogs.com/wangsen/p/9337969.html

  5. loadrunner 场景设计-学习笔记之性能误区

    场景设计-学习笔记之性能误区 by:授客 QQ:1033553122 场景假设: 每个事务仅包含一次请求,执行10000个并发用户数 性能误区: 每秒并发用户数=每秒向服务器提交请求数 详细解答: 每 ...

  6. loadrunner 场景设计-IP Spoofer-多ip负载生成器(Windows平台)

    IP Spoofer-多ip负载生成器 by:授客 QQ:1033553122 1  适用协议 LoadRunner的多ip功能允许运行在单一负载生成器上的Vuser可以通过多ip被识别.服务器和路由 ...

  7. 洗礼灵魂,修炼python(47)--巩固篇—定义类的方法之@classmethod,@staticmethod

    定义类的方法,相信你会说,不就是在class语句下使用def () 就是定义类的方法了嘛,是的,这是定义的方法的一种,而且是最普通的方式 首先,我们已经知道有两种方式: 1.普通方法: 1)与类无关的 ...

  8. 系统运维|IIS的日志设置

    摘要: 1.服务器告警,磁盘资源不足 2.检查发现是IIS日志没有清理并且设置有误.在E盘占用了200G的空间 3.原则上IIS日志不能放在C盘,避免C盘写满了导致操作系统异常 4.附上IIS日志按天 ...

  9. Windows 10忘记登录密码不用怕,系统U盘/光盘轻松重置

    我们有时会遇到忘记Windows10登录密码,或者电脑被其他账户登录后不知道密码无法开机的情况.遇到这些问题后,我们可能会借助一些第三方工具来移除现有密码.然而这些工具本身的安全性还有待检验,肯定不如 ...

  10. 【PAT】B1053 住房空置率(20 分)

    #include<cstdio> #include<string.h> #include<algorithm> using namespace std; int m ...