`
zxmsdyz
  • 浏览: 126877 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Spring AOP使用配置介绍(四):基于@AspectJ注解的aop

阅读更多
定义切点:
package com.maxjay.bank.advice.aspectj;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

/**
 * 日志记录 前置增强
 * 
 * @author Administrator
 * 
 */
// 将该类标识为一个切面
@Aspect
public class LoggerBeforeAdvisor {

	/**
	 * 当被代理对象的方法执行前,此方法被执行
	 * 
	 * @param method
	 *            目标类方法
	 * @param args
	 *            方法的参数
	 * @param obj
	 *            目标类实例
	 */
	// 定义切点和增强类型,将切点、增强类型及其横切逻辑柔和在了一起。注意此处的execution中*号后必须有空格,否则系统启动会异常。
	@Before("execution(* validateUser(..)) && within(com.maxjay.bank.service.impl.*AdviceService)")
	public void beforeValidate() throws Throwable {
		System.out.println("日志记录开始,将要运行的方法为");
	}

}



spring配置文件中添加如下代码:
	<bean id="testAdviceService" class="com.maxjay.bank.service.impl.TestAdviceService" />

	<!-- 使用AOP进行日志记录,定义增强 -->
	<bean class="com.maxjay.bank.advice.aspectj.LoggerBeforeAdvisor" />
	
	<!-- 自动代理创建器,自动将@Aspect注解切面类织入到目标bean中 -->
	<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />


如果想象(一)中的增强那样调用代理对象方法中的参数和返回值,我们该怎样做的?
AspectJ也有实现这方面的功能,请看下面的代码:
package com.maxjay.bank.advice.aspectj;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;

import com.maxjay.bank.model.TSysUser;

/**
 * 日志记录 后置增强
 * 
 * @author Administrator
 * 
 */
@Aspect
public class LoggerAfterAdvice{

	/**
	 * 当被代理对象的方法执行完后,此方法被执行
	 * AfterReturning注解表示该方法时后置增强,其参数value指定了匹配规则,用来判断哪些类中哪些方法需要执行该增强;returning则指定了
	 * 被代理对象的方法执行完成后其返回值用来作为afterReturning中的user参数传递进来。
	 */
	@AfterReturning(value="execution(* validateUser(..)) && within(com.maxjay.bank.service.impl.*AdviceService)", returning="user")
	public void afterReturning(JoinPoint jp, TSysUser user) throws Throwable {
		System.out.println("日志记录结束,刚刚运行完成的方法为"
				+ jp.getTarget().getClass().getName() + "."
				+ jp.getSignature().getName() + "  返回值为:" + user);
	}

}

afterReturning中的参数jp是传递过来的连接点,其中包含了要代理的对象、方法及方法参数等信息。
spring配置可改为下面的这段:
	<bean id="testAdviceService" class="com.maxjay.bank.service.impl.TestAdviceService" />

	<!-- 使用AOP进行日志记录,定义增强 -->
	<bean class="com.maxjay.bank.advice.aspectj.LoggerBeforeAdvisor" />
	<bean class="com.maxjay.bank.advice.aspectj.LoggerAfterAdvice" />
	
	<!-- 基于@AspectJ切面的schema驱动器,使用了该方法后可以将上面的自动代理创建器AnnotationAwareAspectJAutoProxyCreator从配置中去除 -->	<aop:aspectj-autoproxy />


通过此文就基本了解了@AspectJ的使用方法了。
分享到:
评论

相关推荐

    Spring AOP之基于AspectJ注解总结与案例

    Spring AOP之基于AspectJ注解总结与案例 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45394409

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    【Spring AOP】@Aspect结合案例详解(二): @Pointcut使用@within和within

    上文我们已讲完五种通知Advice注解,所以从本文开始介绍@Pointcut切点表达式,虽然Spring AOP的切点表达式尚未 全部实现 @AspectJ 的切点指示符,但是也已经足够多和灵活,本文主要介绍@Pointcut切点表达式中的@...

    Spring AOP源码深度解析:掌握Java高级编程核心技术

    Spring AOP(面向切面编程)是Java高级编程中的重要...Spring AOP的配置方式多样,包括基于接口的配置、schema-based配置和@AspectJ注解配置。通过这些配置方式,开发者可以灵活地实现AOP功能,满足不同场景下的需求。

    Spring实现AOP的多种方式 切点函数

    里面包括4个例子:(1)Spring实现AOP方式之一:基于XML配置的Spring AOP (2)Spring实现AOP方式之二:使用注解配置 Spring AOP (3)Spring AOP : AspectJ Pointcut 切点 (4)Spring AOP : Advice 声明 (通知注解)

    基于框架的Web开发-基于AspectJ的AOP.doc

    @AspectJ使用注解来描述切点。 1 添加依赖Jar包 使用@AspectJ,需要以下的额外Jar包 (1) aspectjweaver.jar和aspectjtools.jar(提供两个版本,低版本JDK6的使用aspectj1.6,高版本如JDK8的使用aspectj1.8) (2) ...

    Spring Aop之AspectJ注解配置实现日志管理的方法

    下面小编就为大家分享一篇Spring Aop之AspectJ注解配置实现日志管理的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    spring 使用 AspectJ注解开发Spring AOP.docx

    Spring是方法级别的AOP框架,而我们主要也是以某个类的某个方法作为切点,用动态代理的理论来说,就是要拦截哪个方法织入对应AOP通知。 代码清单:打印角色接口

    如何使用Spring Boot的@Pointcut注解

    我们首先介绍了@Pointcut注解的作用和其在AspectJ框架中的重要性。然后,我们详细解释了@Pointcut注解的语法和常用的切点表达式规则。 为了帮助读者更好地理解@Pointcut注解的实际应用,我们提供了一个完整的Spring...

    SpringBoot中的AOP+自定义注解(源代码)

    1.4 Spring AOP 和 AspectJ AOP 有什么区别? 2. 在 SpringBoot 中使用 Aop 功能 2.0 创建一个SpringBoot项目 2.1 引入 POM 依赖 2.1.1 引入springboot aop依赖 2.1.2 引入fastjson依赖 2.2 .编写配置类SpringConfig...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    内含有mybatis 拦截器实现的分页代码,spring 的事务和aop 测试、和反射工具类

    Spring实现AOP的四种方式

    配置可以通过xml文件来进行,大概有四种方式: 1. 配置ProxyFactoryBean,显式地设置advisors, advice, target等(基于代理的AOP ) ...4. 通过&lt;aop: aspectj-autoproxy&gt;来配置,使用AspectJ的注解来标识通知及切入点

    spring中使用AspectJ注解相关类库文件

    要在 Spring 应用中使用 AspectJ 注解, 必须在 classpath 下包含 AspectJ 类库: aopalliance.jar、aspectj.weaver.jar 和 spring-aspects.jar等jar包,文件已打包上传。

    Spring使用AspectJ注解和XML配置实现AOP

    主要介绍了Spring使用AspectJ注解和XML配置实现AOP的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Spring AOP 基于注解详解及实例代码

    Spring AOP 基于注解详解及实例代码 1.启用spring对@AspectJ注解的...也可以配置AnnotationAwareAspectJAutoProxyCreator Bean来启动Spring对@AspectJ注解的支持 &lt;bean class=org.springframework.aop.aspectj.a

    Spring AOP实验

    一、 实验目的 1、了解AOP的概念和作用; 2、理解AOP中的相关术语; 3、了解Spring中两种动态代理方式的区别;...分别使用基于XML和注解的AspectJ实现上述功能(创建两个项目)。 (图就是int加减乘除)

    25个经典的Spring面试问答

    25个经典的Spring面试问答,Spring...Spring AOP与AspectJ:理解Spring AOP的概念,以及如何使用AspectJ实现AOP。 Spring与其它技术集成:了解Spring与其它技术的集成,例如与JPA、Hibernate、Thymeleaf等的集成。 S

    SpringAOP+AspectJ

    以公司订单管理的模型为例(大部分步骤和业务了逻辑已经删除,只保存AOP注解这一部分)Spring AOP

    详解Spring Aop实例之AspectJ注解配置

    本篇文章主要介绍了详解Spring Aop实例之AspectJ注解配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    基于AspectJ的AOP开发案例源码.rar

    demo1是aspectj的Aop开发,用于用户是否登录的验证,使用注解来实现,在切面类中配置好切入点。优点:方便快捷 demo2是aspectj的Aop开发,用于用户是否登录的验证,在xml中配置好切面。 优点:便于维护,不用修改源...

Global site tag (gtag.js) - Google Analytics