aop注解 自定义切面的注解写法

spring.xml中

 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     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xsi:schemaLocation="http://www.springframework.org/schema/beans
 8                          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 9                          http://www.springframework.org/schema/context
10                          http://www.springframework.org/schema/context/spring-context-3.0.xsd
11                          http://www.springframework.org/schema/tx
12                          http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
13                          http://www.springframework.org/schema/aop
14                          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
15 <!--      扫描注解bean -->
16      <context:component-scan base-package="cn.us.aspect"/>
17 <!--      开启切面代理 使得spring认识 @Aspect -->
18      <aop:aspectj-autoproxy/>

java文件中   无参数的

 1 package cn.us.aspect;
 2
 3
 4 import org.aspectj.lang.annotation.AfterReturning;
 5 import org.aspectj.lang.annotation.Aspect;
 6 import org.aspectj.lang.annotation.Before;
 7 import org.aspectj.lang.annotation.Pointcut;
 8 import org.springframework.stereotype.Component;
 9
10 import cn.us.domain.User;
11
12 @Component("logAspect")
13 @Aspect
14 public class LogAspect {
15     // @Pointcut("execution(* cn.us.service.impl.UserServiceImpl.addUser(cn.us.domain.User)) and args(user)")   以下是无参数的写法
16      @Pointcut("execution(* cn.us.service.impl.UserServiceImpl.*(..))")
17      public void pointcut()
18      {}
19     // @Before("pointcut(user)")
20       @Before("pointcut()")
21     // public void startRecordLog(User user)
22        public void startRecordLog()
23      {
24          System.out.println("Before log  has started");
25          System.out.println();
26      }
27
28      @AfterReturning(value="pointcut()",returning="val")
29      public void endRecordLog(Object val)
30      {
31          System.out.println("@AfterReturning log  has end");
32          System.out.println(val);
33      }
34 }

有参数的,

利用@before传递参数不成功,利用环绕通知

 1 package cn.us.aspect;
 2
 3
 4 import org.aspectj.lang.ProceedingJoinPoint;
 5 import org.aspectj.lang.annotation.AfterReturning;
 6 import org.aspectj.lang.annotation.Around;
 7 import org.aspectj.lang.annotation.Aspect;
 8 import org.aspectj.lang.annotation.Before;
 9 import org.aspectj.lang.annotation.Pointcut;
10 import org.springframework.stereotype.Component;
11
12 import cn.us.domain.User;
13
14 @Component("logAspect")
15 @Aspect
16 public class LogAspect {
17     // @Pointcut("execution(* cn.us.service.impl.UserServiceImpl.*(cn.us.domain.User)) and args(user)")
18      @Pointcut(value="execution(* cn.us.service.impl.UserServiceImpl.addUser(..)) ")
19      public void pointcut()
20      {}
21
22      @Around(value = "pointcut()")
23      public void aroundRecordLog(ProceedingJoinPoint pjp) throws Throwable
24      {
25          System.out.println("around before");
26          //获取参数
27          Object [] objs=pjp.getArgs();
28          for(Object obj :objs)
29          {
30              System.out.println(obj);
31          }
32          //返回值
33          Object oo=pjp.proceed();
34
35          System.out.println("around after"  +oo);
36      }
37 }

aop注解 自定义切面的注解写法,布布扣,bubuko.com

时间: 2024-10-12 13:38:21

aop注解 自定义切面的注解写法的相关文章

Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式

Spring框架的作用:为了简化java开发 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的 一.IOC(控制反转) 1 构造器注入 (xml配置) 2方法注入 (注解方式) (xml配置) 二,AOP(面向切面) 注解方式 xml配置 只是使用,那简单,

Spring AOP 使用注解定义切面(转载)

原文地址:http://www.jianshu.com/p/6f40dddd71a5 1.定义切面 下面我们就来定义一场舞台剧中观众的切面类Audience: package com.spring.aop.service.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aft

Spring之AOP基本概念及通过注解方式配置AOP

为什么使用AOP 传统方法 AOP前前奏 首先考虑一个问题,假设我们要设计一个计算器,有如下两个需求: - 在程序运行期间追踪正在放生的活动 - 希望计算器只能处理正数的运算 通常我们会用如下代码进行实现: 定义一个接口: public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j); } 实现类(

框架 day37 Spring3,AOP,代理模式(动态/CGLIB/工厂bean),传统AOP,AspectJ框架(基于xml/注解),切入点表达式,jdbcTemplate

1     AOP 1.1   什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. * AOP采取横向抽取机制,取代了传统纵向继承体系

自定义注解之运行时注解(RetentionPolicy.RUNTIME)

对注解概念不了解的可以先看这个:Java注解基础概念总结 前面有提到注解按生命周期来划分可分为3类: 1.RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃: 2.RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期: 3.RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在: 这3个生

Java魔法堂:自定义和解析注解

一.前言 注解(Annotation)作为元数据的载体,为程序代码本身提供额外的信息,使用过MyBatis等ORM框架的朋友对 @Insert 的注解应该不陌生了,这是MyBatis自定义的注解,显然我们也可以按需求自定义一些注解,然后对其进行解析获取元数据,进而实现通过代码生成代码的操作. 二.自定义注解 只需通过 关键字@interface 即可自定义注解 // 标识注解(就是无属性的注解) public @interface AnnotationWithoutProperty{ } //

SpringBoot08 请求方式、参数获取注解、参数验证、前后台属性名不一致问题、自定义参数验证注解、BeanUtils的使用

1 请求方式 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性 1.1 GET 一般用于查询数据,采用明文进行传输,一般用来获取一些无关用户信息的数据 1.2 POST 一般用于插入数据 1.3 PUT 一般用于数据更新 1.4 DELETE 一般用于数据删除 技巧01:一般都是进行逻辑删除(即:仅仅改变记录的状态,而并非真正的删除数据) 2 参数获取注解 2.1

自定义spring参数注解 - 打破@RequestBody单体限制

本文主要描述怎样自定义类似@RequestBody这样的参数注解来打破@RequestBody的单体限制. 目录1 @RequestBody的单体限制2 自定义spring的参数注解3 编写spring的参数注解解析器4 将自定义参数注解解析器设置到spring的参数解析器集合中5 指定参数解析器的优先级 一.@RequestBody的单体限制@RequestBody的作用:将请求体中的整体数据转化为对象. 1 @RequestMapping(value = "/body", meth

java注解自定义使用

Java提供了4种注解,专门负责新注解的创建: @Target: 表示该注解可以用于什么地方,可能的ElementType参数有:CONSTRUCTOR:构造器的声明FIELD:域声明(包括enum实例)LOCAL_VARIABLE:局部变量声明METHOD:方法声明PACKAGE:包声明PARAMETER:参数声明TYPE:类.接口(包括注解类型)或enum声明 @Retention 表示需要在什么级别保存该注解信息.可选的RetentionPolicy参数包括:SOURCE:注解将被编译器丢