这里讲如何使用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基于annotation注解练习
**Spring AOP 简介** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要模块,它扩展了传统的面向对象编程,允许开发者定义“横切关注点”(cross-cutting concerns),如日志、事务...
在本主题中,我们将深入探讨Spring AOP的注解版,它是基于Java注解的实现,简化了配置并提高了代码的可读性。 首先,让我们理解AOP的基本概念。AOP是一种编程范式,允许程序员定义“切面”,这些切面封装了跨越多个...
**Spring AOP 入门篇:面向切面编程的注解与XML模式** 在软件开发中,Spring框架因其强大的功能和灵活性而广受欢迎,尤其是在企业级应用开发中。本教程将深入探讨Spring中的核心概念之一——面向切面编程(Aspect-...
Spring AOP有两种实现方式:基于代理(proxy-based)和基于注解(annotation-driven)。基于代理的AOP通过JDK动态代理或CGLIB生成目标对象的代理,拦截并执行通知。注解驱动的AOP则是利用Spring的`@Aspect`注解来...
本篇文章将深入探讨如何利用Spring的@AspectJ注解来实现AOP,这是一个入门级别的例子,旨在帮助开发者理解并掌握这一关键特性。 首先,我们要明白什么是AOP。面向切面编程是一种编程范式,它允许程序员定义“切面”...
本示例旨在引导初学者入门Spring框架,通过一个简单的应用实例来理解其核心概念。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。依赖注入...
在本文中,我们将深入探讨如何在IntelliJ IDEA(IDEA)中使用Spring框架进行简单的入门。Spring是一个广泛使用的开源Java框架,它为构建企业级应用程序提供了强大的支持,包括依赖注入、面向切面编程(AOP)、事务...
**AOP入门** AOP(Aspect Oriented Programming,面向切面编程)是软件开发领域的一种设计模式,它旨在提高代码的可复用性,降低模块间的耦合度。AOP的核心概念是切面(Aspect),它封装了横切关注点,如日志、事务...
在本教程中,我们将深入探讨如何搭建一个基于Spring框架的Web入门级项目,重点是使用Spring MVC和Spring JDBC实现简单的用户登录功能。Spring是一个广泛使用的Java企业级应用框架,而Spring MVC是它的一个核心模块,...
**基于Annotation的SpringMVC入门小例子** 在Java Web开发中,SpringMVC是一个非常流行的框架,它使得构建Web应用程序变得更加简洁和高效。本篇将详细介绍如何使用注解(Annotation)来配置和运行一个基本的...
SpringActiveMQ入门示例是关于如何在Java环境中利用Spring框架与Apache ActiveMQ集成的一个实践教程。这个示例主要适用于开发者想要了解如何在Spring应用中使用消息队列进行异步通信和解耦。在这个项目中,开发环境...
Spring框架是Java开发中的一个核心框架,以...以上就是Spring框架的一些基础知识点,从入门到精通,需要不断学习和实践,逐步掌握其精髓。通过Spring教程和笔记,你可以深入理解并运用这些知识,提升你的Java开发能力。
3. **基于切面 (AOP) 和惯例进行声明式编程**:AOP 是一种编程范式,允许将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,使得业务逻辑更加清晰。 4. **通过切面和模板减少样板代码**:Spring 提供了...
Spring MVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。本入门Demo将帮助初学者快速理解并掌握 Spring MVC 的基本...
Spring框架是一个开源的Java平台,它为现代基于Java的企业应用程序开发提供全面的编程和配置模型。Spring框架包含了许多模块,这些模块覆盖了各种开发需求,从核心容器(Core Container)到数据访问/集成(Data...
【Spring3.1 入门代码】这篇教程主要面向初学者,旨在引导他们入门Spring MVC框架,通过官网提供的实例代码和教程文档,帮助学习者掌握Spring的基础应用。在这个过程中,理解Spring的核心概念如依赖注入(Dependency...
047-spring-aop-annotation快速实现.mp4 048-spring-aop-获取切点详细信息.mp4 049-spring-aop-切点表达式语法.mp4 050-spring-aop-统一切点管理.mp4 051-spring-aop-环绕通知.mp4 052-spring-aop-切面优先级...