1 包说明
//spring运行需要导入的包
spring.jar
commons-logging.jar
//依赖注入需要导入的包
cglib.jar
asm.jar
//aop 需要导入的包
aspectjweaver.jar
cglib.jar
aop配置使用依赖注入的方式 不使用xml的方式
2 编写aop基本类 man
package com.aop.spring;
import org.springframework.stereotype.Component;
@Component("man")
public class Man {
String name = "";
public Man(){};
public Man(String name)
{
this.name = name;
}
public void add()
{
System.out.println("add");
}
public void add(String name)
{
System.out.println("add");
}
public String getName()
{
System.out.println("getName");
return name;
}
public void update()
{
System.out.println("update");
}
public void delete()
{
System.out.println("delete");
}
}
3 编写切面类,即监听类和方法执行的类
package com.aop.spring;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component("manInterceptor")
@Aspect
public class ManInterceptor {
/**
* 该方法意思就是监听com.aop.spring下所有类的所有方法,以下为具体的说明
* 定义切入点
* 第一个*表示方法的返回值,这里使用通配符,只有返回值符合条件的才拦截,(!void表示有返回值)
* 第一个..表示com.aop.spring包及其子包
* 第二个*表示包下所有的java类都被拦截
* 第三个*表示类的所有方法都被拦截
* (..)表方法的参数可以任意多个,
* 如[String ,Integer]表示第一个参数是String第二个参数是Integer的方法才被拦截
*/
@Pointcut("execution(* com.aop.spring.*.*(..))")
private void pointCutMethod()
{
}
/**
* 定义前置通知 并设置了方法必须包含一个字符参数
*/
@Before("pointCutMethod() && args(userName)")
public void doBefore(String userName)
{
System.out.println("前置通知"+userName);
}
/**
* 定义后置通知,并设置了只有string返回值的方法才会拦截
*/
@AfterReturning(pointcut="pointCutMethod()",returning="result")
public void doAfterReturning(String result)
{
System.out.println("后置通知"+result);
}
/**
* 定义例外通知
*/
@AfterThrowing("pointCutMethod()")
public void doAfterException()
{
System.out.println("异常通知");
}
/**
* 定义最终通知
*/
@After("pointCutMethod()")
public void doAfter()
{
System.out.println("最终通知");
}
/**
* 定义环绕通知
*/
@Around("pointCutMethod()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable
{
System.out.println("进入方法");
Object o = pjp.proceed();
System.out.println("退出方法");
return o;
}
}
4 编写测试类AopTest
package com.aop.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AopTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
Man man = (Man)ctx.getBean("man");
man.add("sky");
}
}
5 总结:测试类输出如下
进入方法
add
后置通知null
最终通知
退出方法
表示Man的add方法被拦截了,并执行了切面类中各种符合条件的监听方法。
可以通过修改切面类中的各种配置来满足不同的处理需求。
分享到:
相关推荐
内容包括: spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar ...spring-aop-2.5.6.jar spring-aop-3.0.0.RELEASE.jar spring-aop-3.0.2.RELEASE.jar spring-aop-sources.jar
spring-aop-2.5.6.jar
2.5.6版本的源码包含了Spring的主要模块,如Core Container、Data Access/Integration、AOP、Web等。通过对这些模块的分析,我们可以了解到: - 如何通过BeanFactory和ApplicationContext来实现IoC。 - AOP代理的...
Spring 2.5.6 版本是该框架的一个较早版本,但仍然包含了丰富的功能和重要的概念,对于初学者和历史项目维护都具有参考价值。 该压缩包“spring-framework-2.5.6-with-docs”包含的资源旨在帮助开发者理解和使用...
1. **Spring AOP 2.5.6.jar**: Spring AOP(面向切面编程)是Spring框架的一个重要组成部分,它允许开发者在不修改源代码的情况下对应用程序进行横切关注点的处理,如日志、事务管理、性能监控等。AOP通过定义切面...
在Spring 2.5.6中,AOP支持基于代理的实现和基于@AspectJ的注解驱动实现。切面的定义、通知类型(前置、后置、环绕等)以及切入点表达式是AOP的关键组成部分。 四、Bean的生命周期管理 在Spring中,每个应用程序...
在本示例中,我们将深入探讨Spring框架2.5.6版本中的面向切面编程(AOP)概念。Spring AOP是Spring框架的核心组件之一,它允许开发者在不修改源代码的情况下,对程序进行横切关注点(如日志、事务管理、性能监控等)...
**Spring2.5.6** 是一个全面的Java企业级应用开发框架,其核心特性包括依赖注入(DI)和面向切面编程(AOP)。依赖注入允许开发者在运行时动态地将依赖关系注入到对象中,降低了组件间的耦合度。Spring2.5.6版本引入...
《Spring框架2.5.6版本详解》 Spring框架,作为Java开发中的核心组件,以其模块化、松耦合的设计理念,为开发者提供了强大的企业级应用支持。2.5.6版是Spring历史上的一个重要里程碑,它在2.5系列中做出了诸多改进...
Spring 2.5.6 提供了对AOP的支持,允许开发者定义和实现横切关注点,如日志、事务管理等,从而实现代码的模块化。AOP代理包括JDK动态代理和CGLIB代理两种方式。 3. **IoC容器** Spring的IoC容器(例如...
《Spring Framework 2.5.6与JUnit 4.4及Spring Test的深度解析》 在软件开发领域,Spring Framework以其强大的依赖注入、面向切面编程(AOP)以及全面的事务管理等功能,成为了Java应用开发的重要基石。而这次我们...
spring-aop.jar 各个版本,免费下载 Spring 的面向切面编程,提供 AOP(面向切面编程)的实现。 如果下载不了,关注我,评论区联系我。
Spring 2.5.6是该框架的一个稳定版本,发布于2009年,它提供了许多功能,包括依赖注入、面向切面编程、事务管理以及与各种数据库、Web服务器和Java EE服务的集成。这个压缩包包含了开发Spring 2.5.6应用所必需的全部...
总之,Spring 2.5.6虽然已经相对较老,但它提供的IoC和AOP特性依然强大,且在很多现有的系统中仍发挥着重要作用。理解和掌握这些知识点,对于任何Java开发者来说都是有价值的,特别是那些需要维护旧系统或研究历史...
2.5.6版本中,Spring对AOP的代理模式进行了优化,包括JDK动态代理和CGLIB代理,使得切面的处理更加高效。 三、数据访问/集成 在数据访问方面,Spring 2.5.6支持多种持久化技术,如JDBC、Hibernate、JPA等。它提供...
其次,Spring的AOP(面向切面编程)在2.5.6版本中也得到支持。AOP允许开发者定义"切面",即跨越多个对象的行为或责任,如日志、事务管理等。@Aspect注解用于定义切面,@Before、@After、@Around等注解用于指定拦截器...
1. **所有必要的jar文件**:这些jar文件包含了Spring框架的所有核心模块和其他扩展模块,如spring-core、spring-beans、spring-context、spring-aop、spring-jdbc等。 2. **源代码**:提供了Spring框架的源码,这...
这里提到的是Spring 2.5.6和3.0两个版本的jar包集合,这两个版本分别代表了Spring在不同阶段的发展。 首先,Spring 2.5.6是Spring框架的一个较早版本,发布于2009年。这个版本引入了许多重要的特性,例如: 1. **...