依旧是LogInterceptor的例子。下面是beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="com.bjsxt"/>
<aop:aspectj-autoproxy />
</beans>
注意添加aop的namespace和<aop:aspectj-autoproxy />这一句。LogInterceptor的代码如下:
package com.bjsxt.aop;
import org.aspectj.lang.ProceedingJoinPoint;
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;
@Aspect
@Component
public class LogInterceptor {
@Pointcut("execution(public * com.bjsxt.service..*.add(..))")
public void myMethod(){};
@Before("myMethod()")
public void before() {
System.out.println("method before");
}
@Around("myMethod()")
public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("method around start");
pjp.proceed();
System.out.println("method around end");
}
}
这里需要注意两点:
(1) 这里必须要有@Component,让Spring来new一个LoginInterceptor对象(我们定义了<context:component-scan base-package="com.bjsxt"/>来让Spring来扫描com.bjsxt包;扫描到@Aspect就知道要织入这个类了)。这样才能把LoginInterceptor对象织入UserDAOImpl
(2) execution(public void com.bjsxt.dao.UserDAOImpl.save(com.bjsxt.model.User)"),这是AspectJ语法,execution表示在方法执行时切入。另有其他的切入点,比如属性初始化时、类加载时
根据这个例子,我们来理解一些AOP的概念:
(1) Target: UserDAOImpl是织入的Target
(2) JoinPoint: "execution(public void save())"这里就是JoinPoint,即切入点
(3) Advice: before()方法是Advice,Advice is an action taken by an Aspect at a certain JoinPoint
(4) AdviceType: @Before是AdviceType,表示这是一个Advice that executes before a JoinPoint
(5) PointCut: 从通配符(@Pointcut("execution(public * com.bjsxt.service.*.add(.))"))可以看出,PointCut是JoinPoint的集合,但是注意PointCut必须依赖于一个方法
(6) Aspect: LogInterceptor这个类,或者说LogInterceptor这个类的逻辑(即记录日志)是一个Aspect
分享到:
相关推荐
在Spring AOP的学习中,动态代理是一个至关重要的概念。本文将深入探讨动态代理在Spring框架中的应用,以及如何通过JDK的动态代理机制实现这一功能。动态代理是面向切面编程(AOP)的一种实现方式,它允许我们在不...
3. **灵活的通知模型**:Spring AOP提供了多种类型的通知,包括around、before、after returning、after throwing等,使得开发者可以根据实际需求选择最适合的通知类型。 4. **丰富的切入点表达式语言**:Spring ...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...
1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或不希望使用接口的类。代理对象在调用目标方法时会执行切面逻辑。 2. **织入**:织入...
#### 三、Spring AOP 的关键概念 **1. Aspect (切面)** - 定义:用来描述横切关注点的模块化,比如日志记录、事务管理等。 **2. Advice (通知)** - 定义:在切面中的具体实现,即在特定的连接点上所执行的代码。 -...
### 一、AOP基本概念 1. **切面(Aspect)**:切面是AOP的核心,包含了横切关注点和通知的组合。在Spring AOP中,切面可以由一个Java类或一个注解定义。 2. **通知(Advice)**:通知是指在特定连接点执行的代码,...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过...这个例子提供了学习Spring AOP实际操作的宝贵资源,通过阅读源码和运行测试,你将对Spring AOP有更全面的认识。
1. **基于代理的AOP**:Spring使用JDK动态代理或CGLIB代理来创建代理对象。如果目标类实现了接口,Spring会使用JDK动态代理;否则,它会使用CGLIB生成一个子类来实现AOP。 2. **基于字节码增强的AOP**:通过ASM库,...
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...
7. **代理(Proxy)**:Spring AOP通过动态创建一个代理对象来实现对目标对象的增强。 8. **织入(Weaving)**:将切面与目标对象进行组合的过程。Spring AOP是在运行时完成织入的。 #### 三、Spring AOP 的实现机制 ...
本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...
赠送jar包:spring-aop-5.0.10.RELEASE.jar; 赠送原API文档:spring-aop-5.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.0.10.RELEASE....
- `ApplicationConfig`:Spring配置文件,启用AOP并配置切面。 - 测试类:用来验证AOP功能是否正确工作。 通过运行这个项目,你可以看到AOP如何在实际场景中工作,如何通过切面和通知来增强业务逻辑。 总的来说,...
通过这个例子,我们可以学习到Spring AOP的基本概念和用法,以及如何在实际开发中利用它来增强代码的灵活性和可维护性。同时,了解动态代理机制有助于我们理解Spring AOP的工作原理。在实际项目中,Spring AOP不仅...
5. **代理(Proxy)**:Spring AOP通过创建代理对象来实现对目标对象的拦截,代理对象会在调用目标方法前后执行通知。 ### 二、Spring AOP配置与实现 1. **注解驱动(Annotation-based)**:使用`@Aspect`定义切面...
这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,我们要知道AOP的核心概念:切面、通知、连接点、切点、目标对象和代理。切面是包含横切关注点(如日志记录、事务管理等)的模块化组件...
- **Spring AOP 实现**:Spring 使用代理模式实现 AOP 功能,支持基于接口的动态代理和 CGLIB 字节码生成库。 - **Spring AOP 对 AspectJ 的支持**:Spring 允许使用 AspectJ 的注解来定义切面和切点。 - **Spring ...
在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知...
Spring AOP,全称Aspect-Oriented Programming,是Spring框架中的一个重要组成部分,它引入了面向切面编程的概念,使得开发者可以将关注点分离,更好地实现业务逻辑与系统服务的解耦。在这个经典例子中,我们将深入...
3. **易于集成**:Spring AOP可以轻松地与其他Spring特性(如依赖注入等)集成。 #### 四、Spring AOP的应用场景 Spring AOP适用于多种应用场景,包括但不限于: 1. **日志记录**:在方法调用前后自动记录日志。 ...