这里讲如何使用Annotation来实现Spring的AOP功能。
通过Annotation来实现Spring的AOP功能,要导入几个包:
aspectjrt.jar
aopalliance.jar
aspectjweaver.jar
1. 首先在beans.xml中加入aop的schema
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
2. 打开基于Annotation的AOP功能。
<!-- Enables the use of the @AspectJ style of Spring AOP. -->
<aop:aspectj-autoproxy/>
3. 定义一个切面类 - Declaring an aspect class
package com.lj.proxy;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import com.lj.log.Logger;
@Component("logAspect") //让这个切面类被Spring所管理
@Aspect //声明这个类是一个切面类
public class LogAspect {
/**
* 这就是通知 advice
* execution(xx)就是pointcut表达式
* 第一个*表示任意返回值,
* 第二个*表示该包里面所有的类,
* add*表示所有以add开头的方法
* (..)表示里面是任意的参数
* 通过||可以放入多个pointcut
*/
@Before(value = "execution(* com.lj.dao.*.add*(..))||"+
"execution(* com.lj.dao.*.update*(..))||"+
"execution(* com.lj.dao.*.list*(..))")
public void logStart(){
Logger.info("加入日志");
}
}
此时我们便不需要去修改service层的注入对象了。
@Service("userService")
public class UserService implements IUserService {
@Resource(name="userDao") //这里不需要用userDynamicDao,UserDynamicDao类也不用写了。
private IUserDao userDao;
但是这里在LogAsprct中并没有获取方法名称,如何获取方法名称呢?
4. 通过JointPoint获取方法
public void logStart(JoinPoint jp){
//返回类对象
System.out.println(jp.getTarget());
//Signature.getName()返回方法名称
System.out.println(jp.getSignature().getName());
Logger.info("加入日志");
}
getTarget() ->返回调用的类对象。
Singature.getName() ->返回调用的方法。
5. 设置@After, @Around
//After表示在方法被调用结束之后才开始执行
@After(value = "execution(* com.lj.dao.*.list*(..))")
public void endStart(JoinPoint jp) {
Logger.info("方法调用结束");
// 返回类对象
}
@Around(value = "execution(* com.lj.dao.*.list*(..))")
public void logAround(ProceedingJoinPoint proceedingJoinPoint){
Logger.info("开始在Around中加入日志");
try {
proceedingJoinPoint.proceed();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //执行程序
Logger.info("Around执行结束");
}
最终调用UserDao的list方法,执行结果如下:
- 大小: 35.6 KB
分享到:
相关推荐
用spring AOP做的最简单的日志记录小例子,特别简单,可直接运行。
spring AOP入门教程
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
Spring AOP 入门 作者:廖雪峰
最简单的SpringAOP入门案例,对于配置文件有详细的解释,适合初学者去理解AOP编程
NULL 博文链接:https://baobeituping.iteye.com/blog/1201798
Spring AOP 入门实例1
spring aop jar 包
spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop
SpringAOP入门和原理分析,动态代理
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.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
描述一下Spring AOP? 在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同? AOP有哪些可用的实现? Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介...
Spring_Annotation_AOP
一、适合人群 1、具备一定Java编程基础,初级开发者 2、对springboot,mybatis,mysql有基本认识 3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 ...4、spring boot,mybatis,druid,spring aop的使用
NULL 博文链接:https://bijian1013.iteye.com/blog/2142528
spring的aop简单例子spring的aop简单例子spring的aop简单例子spring的aop简单例子
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器...Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中
Spring AOP简单demo 入门级的 advice
springaop依赖的jar包,spring版本2.5.6,如果需要,可以下载使用,欢迎各位评论指出不足
aop入门。