配置文件的写法
<?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);
}
}
运行它:
分享到:
相关推荐
关于AOP注解前置通知、后置通知、返回通知、异常通知的注解注释及应用
<aop:after method="after" pointcut-ref="pointCut"/> aop后置通知, <aop:after-throwing method="exception" pointcut-ref="pointCut"/> aop异常通知 以上结合起来意思就是在调用com.spring.service包或子包下的...
NULL 博文链接:https://baobeituping.iteye.com/blog/1208293
基于 MethodBeforeAdvice、AfterReturningAdvice 利用 Spring Api 定义前、后置处理方法,并通过代理工厂类获取代理对象(代码或Xml配置实现) 2.ProxyFactoryBean 显式地设置 Advisors、Advice、Target等(基于代理...
Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。 第一章 序言 第二章 简介 2.1.概述 2.2.背景 2.3.模块 2.4.许可证信息 2.5.支持 第三章 背景 3.1.控制反转 第...
Bean、通过 FactoryBean 配置 Bean、通过注解配置 Bean、泛型依赖注入、AOP 基础、前置通知、后置通知、返回通知、异常通知、环绕通知、切面的优先级、切点表达式、使用 XML 文件的方式配置 AOP、使用 JdbcTemplate ...
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注解驱动开发第29讲——注册完AnnotationAwareAspectJAutoProxyCreator后置处理器之后,就得完成BeanFactory的初始化工作了
注意:使用注解的方式,最终通知和后置通知顺序换了,建议使用环绕通知 注解 配置 声明式事务管理 PlatFormTransactionManager:平台事务管理器:定义了commit/rollback Mybatis/jdbc:...
基于注解与 XML 配置文件两种形式的 AOP demo。 基于 xml 配置文件的 aop 管理 ```xml <!-- 配置切面的bean --> <bean id="loggingAspect" class="com.jas.aop.xml.LoggingAspect"/> <aop:config> <!...
3.3、@AfterReturning,后置【try】通知,放在方法头上,使用returning来引用方法返回值。 3.4、@AfterThrowing,后置【catch】通知,放在方法头上,使用throwing来引用抛出的异常。 3.5、@Around,环绕通知,放在...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...
- 每一个bean创建完成,都会使用各种后置处理器进行处理;来增强bean的功能; - AutowiredAnnotationBeanPostProcessor:处理自动注入 - AnnotationAwareAspectJAutoProxyCreator:来做AOP功能; - xxx.... -...
本项目是提供给java新手学习使用的。 本项目演示了java的 AOP 面向切面 的开发。 本项目演示了 前置切面,环绕切面, 后置异常切面 的开发。 本项目的技术栈是 Maven+Spring 如果您是技术高手,请不要购买,这个资源...
在Spring中配置Bean、自动装配、Bean之间的关系(依赖、继承)、Bean的作用域、使用外部属性文件、SpEL、管理Bean的生命周期、通过工厂方法配置Bean、通过注解配置Bean、注解方式AOP基础、前置通知、后置通知、返回...