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
spring2.5.6 aop简单示例,导入可运行,包括必须jar包
commons总包+spring总包+常用包.rar,jstl,图表,日志,文件上传,httpclient请求方式
spring-aop.jar 各个版本,免费下载 Spring 的面向切面编程,提供 AOP(面向切面编程)的实现。 如果下载不了,关注我,评论区联系我。
spring-aop-3.1.3.RELEASE-sources.jar spring-asm-3.1.3.RELEASE-sources.jar spring-aspects-3.1.3.RELEASE-sources.jar spring-beans-3.2.0.RELEASE-sources.jar spring-context-3.1.3.RELEASE-sources.jar ...
spring 2.5.6 + struts 2.2.1 + hibernate 3.5.5 内有 AOP 的切面、全部的注解的 M V C 结构,之外还在上网上找了一个同学的学习笔记一起打包,感觉好不错!
spring2.5.6_参考文档,包括ioc,aop,于hibernate的集成,和struts2的集成!
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解,包含ssh最新框架的集成,IOC注入,AOP面向切面编程.
springaop依赖的jar包,spring版本2.5.6,如果需要,可以下载使用,欢迎各位评论指出不足
spring AOP aspectjrt 自带的所有需要包 aspectjrt-1.6.9.jar aspectjweaver-1.6.9.jar cglib-nodep-2.2.jar spring-2.5.6.jar asm-2.2.3.jar asm.commons-2.2.3.jar asm.util-2.2.3.jar
需要xmemcached-1.2.5+spring-2.5.6 class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown"> ${XMemcached_servers} <!-- server's weights --> ...
三大框架基本包(spring,hibernate,struts)包含commons-beanutils,dom4j-1.6.1,hibernateOrJPA,spring2.5.6,struts-1.3.8-lib,struts2.0.14
基于 Spring2.5.6 包含Spring2.5中的信赖注入、AOP、事务管理等较全面的内部。
课程内容 面向接口(抽象)编程的概念与好处 IOC/DI的概念与好处 ...Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要) opensessionInviewfilter(记住,解决什么问题,怎么解决) Spring JDBC
spring-web-2.5.6.jar //1 struts2-core-2.1.6.jar //2 struts2-convention-plugin-2.1.6.jar //2* struts2-spring-plugin-2.1.6.jar //1 xwork-2.1.2.jar //2 xerces-2.6.2.jar //3 xml-apis.jar //3 注:以下包...
课程内容 面向接口编程(面向抽象编程) 什么是IOC(DI),有什么好处 Spring简介 Spring IOC配置与应用 什么是AOP Spring AOP配置与应用 Spring整合Hibernate Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2
新手学习spring的笔记,面向接口(抽象)编程的概念与好处,IOC/DI的概念与好处,AOP的概念与好处,Spring简介,Spring应用IOC/DI,Spring应用AOP(重要),Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合……
J2EE SSH2架构设计 Struts2.1.8+Spring2.5.6+Hibernate3.3整合,采用AOP事务管理方式
6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...