`
shenshuibomb
  • 浏览: 24472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用Spring注解方试实现AOP1--前后通知与后置通知

阅读更多

配置文件的写法

<?xmlversion="1.0"encoding="UTF-8"?>

 

<!--

-ApplicationcontextdefinitionforJPetStore'sbusinesslayer.

-ContainsbeanreferencestothetransactionmanagerandtotheDAOsin

-dataAccessContext-local/jta.xml(seeweb.xml's"contextConfigLocation").

-->

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

<aop:aspectj-autoproxy/>

<bean id="Interceptor" class="com.sszd.aop.DbManage"/>

<bean id="DBBean" class="com.sszd.db.DbOpretor"/>

</beans>

 

首先编写一个方法类

package com.sszd.db;

 

public class DbOpretor{


publicvoidinsert(Stringsql)//带参数

{

System.out.println("insert方法(带参数)");

}

public int select(intid)//带返回值

{

  System.out.println("select方法(有返回值)");

  return id;

}

 

public void commit()

{

 System.out.println("commit方法");

}

}

创建一个切面类


@Aspect

public class DbManage{


@Pointcut("execution(*com.sszd.db..*.*(..))")

public void perform(){}

 

@Before("perform()")

public void preMangeNoargs()

{

System.out.println("前置通知无参数");

}

@AfterReturning("perform()")//无返参数

publicvoidafterMange()

{

System.out.println("后置通知无参数");

}

}

我这里用Junit做测试

package com.sszd.test;

import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sszd.db.DbOpretor;

public class AOPTest extends TestCase {

public void testAop()
{
ApplicationContext cxt = new ClassPathXmlApplicationContext("ApplicationContext.xml");
DbOpretor db = (DbOpretor)cxt.getBean("DBBean");
db.commit();
}
}

 

此外还可以对有参数以及有返回值的方法进行拦截

insert方法

对比上一个DbManage类

@Aspect
public class DbManage {
@Pointcut("execution(* com.sszd.db..*.*(..))")
public void perform(){}

@Before("perform() && args(sql)")//带参数
public void preMangeArgs(String sql)
{
System.out.println("前置通知带参数");
System.out.println("DbManage中接收的SQL:"+sql);

}

@AfterReturning(pointcut="perform()",returning="result")//有返回值
public void afterMange(int result)
{
System.out.println("后置通知");
System.out.println("DbOpretor->select方法返回原值:"+result+"\n");

}
}

继续Junit测试:

package com.sszd.test;

import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sszd.db.DbOpretor;

public class AOPTest extends TestCase {

public void testAop()
{
ApplicationContext cxt = new ClassPathXmlApplicationContext("ApplicationContext.xml");
DbOpretor db = (DbOpretor)cxt.getBean("DBBean");
//db.commit();
db.insert("insert SQL");
db.select(2);
}
}

运行它:




 


分享到:
评论

相关推荐

    spring AOP注解的应用1

    关于AOP注解前置通知、后置通知、返回通知、异常通知的注解注释及应用

    Spring AOP配置源码

    &lt;aop:after method="after" pointcut-ref="pointCut"/&gt; aop后置通知, &lt;aop:after-throwing method="exception" pointcut-ref="pointCut"/&gt; aop异常通知 以上结合起来意思就是在调用com.spring.service包或子包下的...

    spring aop的注解配置中,前置,后置,环绕通知,以及异常通知怎么获得被代理方法的参数

    NULL 博文链接:https://baobeituping.iteye.com/blog/1208293

    AOP 和 Aspect 注解切入 测试 Demo

    基于 MethodBeforeAdvice、AfterReturningAdvice 利用 Spring Api 定义前、后置处理方法,并通过代理工厂类获取代理对象(代码或Xml配置实现) 2.ProxyFactoryBean 显式地设置 Advisors、Advice、Target等(基于代理...

    spring.net中文手册在线版

    Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。 第一章 序言 第二章 简介 2.1.概述 2.2.背景 2.3.模块 2.4.许可证信息 2.5.支持 第三章 背景 3.1.控制反转 第...

    尚硅谷佟刚Spring4代码及PPT.rar

    Bean、通过 FactoryBean 配置 Bean、通过注解配置 Bean、泛型依赖注入、AOP 基础、前置通知、后置通知、返回通知、异常通知、环绕通知、切面的优先级、切点表达式、使用 XML 文件的方式配置 AOP、使用 JdbcTemplate ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    源码Spring注解驱动开发第30讲——AnnotationAwareAspectJAutoProxyCreator作为后置处理

    源码Spring注解驱动开发第30讲——AnnotationAwareAspectJAutoProxyCreator作为后置处理器,你知道它都做了些什么吗?

    源码Spring注解驱动开发第29讲——注册完AnnotationAwareAspectJAutoProxyCreator后置处

    源码Spring注解驱动开发第29讲——注册完AnnotationAwareAspectJAutoProxyCreator后置处理器之后,就得完成BeanFactory的初始化工作了

    Spring.html

    注意:使用注解的方式,最终通知和后置通知顺序换了,建议使用环绕通知 注解 配置 声明式事务管理 PlatFormTransactionManager:平台事务管理器:定义了commit/rollback Mybatis/jdbc:...

    Spring AOP demo

    基于注解与 XML 配置文件两种形式的 AOP demo。 基于 xml 配置文件的 aop 管理 ```xml &lt;!-- 配置切面的bean --&gt; &lt;bean id="loggingAspect" class="com.jas.aop.xml.LoggingAspect"/&gt; &lt;aop:config&gt; &lt;!...

    Spring AOP @Aspect 基本用法

    3.3、@AfterReturning,后置【try】通知,放在方法头上,使用returning来引用方法返回值。 3.4、@AfterThrowing,后置【catch】通知,放在方法头上,使用throwing来引用抛出的异常。 3.5、@Around,环绕通知,放在...

    Spring.3.x企业应用开发实战(完整版).part2

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    Spring3.x企业应用开发实战(完整版) part1

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    IOC创建流程.xmind

    - 每一个bean创建完成,都会使用各种后置处理器进行处理;来增强bean的功能; - AutowiredAnnotationBeanPostProcessor:处理自动注入 - AnnotationAwareAspectJAutoProxyCreator:来做AOP功能; - xxx.... -...

    最简单的基于注解进行面向切面AOP开发案例

    本项目是提供给java新手学习使用的。 本项目演示了java的 AOP 面向切面 的开发。 本项目演示了 前置切面,环绕切面, 后置异常切面 的开发。 本项目的技术栈是 Maven+Spring 如果您是技术高手,请不要购买,这个资源...

    Spring 入门到实战

    在Spring中配置Bean、自动装配、Bean之间的关系(依赖、继承)、Bean的作用域、使用外部属性文件、SpEL、管理Bean的生命周期、通过工厂方法配置Bean、通过注解配置Bean、注解方式AOP基础、前置通知、后置通知、返回...

Global site tag (gtag.js) - Google Analytics