当前位置:首页 > 开发 > 编程语言 > Spring > 正文

Spring AOP 简单使用

发表于: 2013-05-04   作者:chinrui   来源:转载   浏览次数:
摘要: Spring AOP 在beans.xml进行配置,声明aop标签的使用规则 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xs
Spring AOP

在beans.xml进行配置,声明aop标签的使用规则
<?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/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
  <context:annotation-config/>
  <context:component-scan base-package="com.edu.hpu" />
  <aop:aspectj-autoproxy/>
</beans>

导入相关jar包
  • aspectj-1.7.2.jar
  • aspectjweaver.jar
  • spring-aop-3.2.1.RELEASE.jar
  • spring-aspects-3.2.1.RELEASE.jar
  • aopalliance-alpha1.jar
  • aopalliance.jar

编写需要加入逻辑的类LogInteceptor,并在UserDAOImpl类save方法前插入逻辑
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component(value="logInterceptor")
public class LogInterceptor {

	@Before("execution(public void
              com.edu.hpu.impl.UserDAOImpl.save(com.edu.hpu.model.User))")
	public void before() {
		System.out.println("method start");
	}
}

在save方法正常执行完毕的时候加入逻辑
@AfterReturning("execution(public void
 com.edu.hpu.impl.UserDAOImpl.save(com.edu.hpu.model.User))")
public void afterReturning() {
	System.out.println("after Returning!");
}

在任何方法出现异常的时候加入逻辑
@AfterThrowing("execution(public * com.edu.hpu.impl.*.*(..))")
public void afterThrowing() {
	System.out.println("after Throwing");
}

在方法前后加入逻辑
@Around("execution(public * com.edu.hpu.impl.*.*(..))")
public void around(ProceedingJoinPoint pjp) throws Throwable {
	System.out.println("around method start");
	pjp.proceed();
	System.out.println("around method end");
}

定义通用方法,使用Pointcut切面
@Pointcut("execution(public * com.edu.hpu.impl.*.*(..))")
public void myMethod() {};

@Before("myMethod()")
public void before() {
	System.out.println("method start");
}

使用XML进行Aspect配置
在相应save方法前加上LogInterceptor类before方法的逻辑
第一种方法:声明一个全局的切面(Pointcut)
<bean id="logInteceptor" class="com.edu.hpu.aop.LogInterceptor"></bean>
<aop:config>
	<aop:pointcut expression="
execution(public * com.edu.hpu.impl.UserDAOImpl.*(com.edu.hpu.model.User))" id="servicePointcut"/>

	<aop:aspect id="logAspect" ref="logInteceptor">
		<aop:before method="before" pointcut-ref="servicePointcut"/>
	</aop:aspect>
</aop:config>

第二种方法:声明一个局部的Pointcut
<bean id="logInterceptor" class="com.edu.hpu.aop.LogInterceptor"></bean>
<aop:config>
	<aop:aspect id="logAspect" ref="logInterceptor">
		<aop:pointcut 
expression="execution(public * *.*(..))" id="servicePointcut"/>
		<aop:before method="before" pointcut-ref="servicePointcut"/>
	</aop:aspect>
</aop:config>

第三种方法:不声明Pointcut
<bean id="logInterceptor" class="com.edu.hpu.aop.LogInterceptor"></bean>
<aop:config>
	<aop:aspect id="logAspect" ref="logInterceptor">
		<aop:before method="before" pointcut="
execution(public * com.edu.hpu.impl.UserDAOImpl.*(com.edu.hpu.model.User))" />
	</aop:aspect>
</aop:config>

Spring AOP 简单使用

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Spring注解Aop简单使用 结构: 相关代码配置: Anno.java package com.nassir.aop; import java.lan
分享一个自己写的最为简单的Spring AOP的应用,其实,本人也是学习Spring不久,只是把一些个人的理
分享一个自己写的最为简单的Spring AOP的应用,其实,本人也是学习Spring不久,只是把一些个人的理
说起aop,大家都很熟悉。 ①.Aop是什么呢? 通常来讲就是Aspect Oriented Programming的缩写,翻译
一、概述。 AOP大家都知道切面编程,在Spring中annotation可以实现简单的AOP列子。下面还未大家介绍
由于本猿本次的目的只有单例生命周期的对象们。 写一个装配仪,遍历原始类型所有声明字段,查看字段
本文的大体思路是展示了一次业务交易如何动态地为子系统处理过程触发业务事件。本文所示的例子使用S
背景 公司在做监控迁移过程中,使用了aop:config进行配置。 配置例子: <aop:config> <aop
背景 公司在做监控迁移过程中,使用了aop:config进行配置。 配置例子: <aop:config> <aop
类似于上一篇日志,这里使用AOP的方式来配置。 工程结构: 大部分代码跟上一个工程类似。 服务类Stu
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号