配置文件的写法
<?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学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、性能监控等,而无需侵入业务代码。下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### ...
本篇文章将深入探讨如何通过注解方式在Spring中实现AOP。 首先,我们需要了解AOP的基本概念。AOP是一种编程范式,它允许程序员定义“切面”,这些切面包含了一组相关操作,可以在多个对象或方法上统一实施。Spring ...
本篇文章将深入探讨如何在Spring中通过注解实现AOP。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,这些切面包含了跨越多个对象的行为或责任。切点是这些行为插入到主业务逻辑...
在这个例子中,我们将深入探讨Spring AOP中的前置通知、后置通知以及环绕通知的实现方式。 前置通知(Before Advice)在目标方法执行前触发,通常用于执行验证、初始化等操作。在Spring AOP中,我们可以使用`@...
下面我们将深入探讨如何使用注解来实现Spring AOP。 首先,我们需要了解AOP的基本概念。AOP是一种编程范式,旨在将横切关注点(如日志、事务管理、安全性等)从核心业务逻辑中分离出来。在Spring中,切面由通知...
它们可以通过实现`org.springframework.aop.AfterReturningAdvice`和`org.springframework.aop.ThrowsAdvice`接口来创建,或者使用`@AfterReturning`和`@AfterThrowing`注解。 ```java @Aspect public class ...
总结来说,"springaop-demo01"展示了如何在Spring框架中使用注解AOP进行切面编程,实现对业务代码的透明增强;而"SSM-MybatisOneForOne-demo01"则展示了在SSM整合中,如何通过MyBatis的一对一映射处理两个表之间的...
总结来说,这个Spring AOP注解方式的Demo展示了如何通过简单的注解定义切面、切点和通知,实现对业务逻辑的无侵入式增强。这种方式使得代码更简洁、可读性更强,同时也充分利用了Spring框架的优势。对于理解和实践...
`<aop:advisor>`则将`loggingAdvice`这个通知与`serviceMethods`切点关联起来,意味着在匹配到的方法执行前后,`LoggingAspect`类中的通知将会被调用。 接下来,我们要创建一个切面类`LoggingAspect`,它包含了具体...
本篇主要探讨的是如何利用Spring AOP的注解来实现这些功能,包括前置通知、后置通知、返回通知和异常通知。 ### 前置通知(Before通知) 前置通知在目标方法执行之前运行。在Spring AOP中,我们使用`@Before`注解...
Spring注解AOP允许我们在不编写XML配置的情况下实现AOP功能。以下是一些关键的注解: 1. `@Aspect`:标记一个类为切面,这个类可以包含多个通知方法。 2. `@Before`:前置通知,方法会在目标方法执行前被调用。 3...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...
在Spring中,注解使得AOP的使用更加简洁,避免了XML配置的繁琐。本篇文章将详细讲解五种主要的AOP通知注解及其应用。 1. 前置通知(@Before):在目标方法执行之前运行。例如,可以用于进行参数校验或开启事务。使用`...
本篇文章将详细探讨如何通过注解在Spring中实现AOP。 首先,我们需要理解AOP的基本概念。AOP的核心思想是将那些分散在各个业务逻辑中的共同行为,如日志记录、事务处理、性能监控等,抽取出来,形成独立的模块,...
在Spring AOP中,`@After`注解用于实现后置通知。后置通知可以用于做一些资源清理工作,或者记录方法执行时间等。例如: ```java @Aspect public class LoggingAspect { @After("execution(* com.example.service....
《Spring AOP 4.0.0.RELEASE:深度解析与应用》 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它为开发者提供了声明式事务管理、日志记录、权限控制等核心功能。在4.0.0....
通过以上介绍,我们可以看到Spring的注解AOP配置是如何让代码更简洁、更易于理解和维护的。结合实际的项目需求,我们可以灵活地使用这些注解来实现各种企业级功能,如日志、事务控制等,从而提高代码的复用性和模块...
4. **织入通知**:使用`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing` 或 `@Around` 注解将通知与匹配的连接点关联起来。 5. **配置AOP**:在Spring配置文件中启用AOP并注册切面,或者在使用Java配置时...
使用Spring的注解方式实现AOP实例 使用Spring的注解方式实现AOP实例是指通过使用Spring框架提供的注解方式来实现Aspect-Oriented Programming(面向方面编程)的功能。AOP是面向对象编程的一种补充,能够将跨越多个...