`

[#0x0044] Spring AOP学习(三):例子与基本概念

阅读更多

  依旧是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

 

分享到:
评论

相关推荐

    [#0x0042] Spring AOP学习(二):动态代理

    在Spring AOP的学习中,动态代理是一个至关重要的概念。本文将深入探讨动态代理在Spring框架中的应用,以及如何通过JDK的动态代理机制实现这一功能。动态代理是面向切面编程(AOP)的一种实现方式,它允许我们在不...

    Spring AOP面向方面编程原理:AOP概念

    3. **灵活的通知模型**:Spring AOP提供了多种类型的通知,包括around、before、after returning、after throwing等,使得开发者可以根据实际需求选择最适合的通知类型。 4. **丰富的切入点表达式语言**:Spring ...

    Spring AOP 入门作者:廖雪峰

    ### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...

    简单spring aop 例子

    1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或不希望使用接口的类。代理对象在调用目标方法时会执行切面逻辑。 2. **织入**:织入...

    Spring AOP学习资料(pdf)

    #### 三、Spring AOP 的关键概念 **1. Aspect (切面)** - 定义:用来描述横切关注点的模块化,比如日志记录、事务管理等。 **2. Advice (通知)** - 定义:在切面中的具体实现,即在特定的连接点上所执行的代码。 -...

    SpringAop学习笔记以及实现Demo

    ### 一、AOP基本概念 1. **切面(Aspect)**:切面是AOP的核心,包含了横切关注点和通知的组合。在Spring AOP中,切面可以由一个Java类或一个注解定义。 2. **通知(Advice)**:通知是指在特定连接点执行的代码,...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过...这个例子提供了学习Spring AOP实际操作的宝贵资源,通过阅读源码和运行测试,你将对Spring AOP有更全面的认识。

    spring AOP入门教程

    1. **基于代理的AOP**:Spring使用JDK动态代理或CGLIB代理来创建代理对象。如果目标类实现了接口,Spring会使用JDK动态代理;否则,它会使用CGLIB生成一个子类来实现AOP。 2. **基于字节码增强的AOP**:通过ASM库,...

    Spring AOP实现机制

    **Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...

    spring Aop文档

    7. **代理(Proxy)**:Spring AOP通过动态创建一个代理对象来实现对目标对象的增强。 8. **织入(Weaving)**:将切面与目标对象进行组合的过程。Spring AOP是在运行时完成织入的。 #### 三、Spring AOP 的实现机制 ...

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    spring-aop-5.0.10.RELEASE-API文档-中文版.zip

    赠送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....

    Spring Aop使用实例

    - `ApplicationConfig`:Spring配置文件,启用AOP并配置切面。 - 测试类:用来验证AOP功能是否正确工作。 通过运行这个项目,你可以看到AOP如何在实际场景中工作,如何通过切面和通知来增强业务逻辑。 总的来说,...

    SpringAOP的例子

    通过这个例子,我们可以学习到Spring AOP的基本概念和用法,以及如何在实际开发中利用它来增强代码的灵活性和可维护性。同时,了解动态代理机制有助于我们理解Spring AOP的工作原理。在实际项目中,Spring AOP不仅...

    spring aop 附带测试实例

    5. **代理(Proxy)**:Spring AOP通过创建代理对象来实现对目标对象的拦截,代理对象会在调用目标方法前后执行通知。 ### 二、Spring AOP配置与实现 1. **注解驱动(Annotation-based)**:使用`@Aspect`定义切面...

    spring的aop简单例子

    这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,我们要知道AOP的核心概念:切面、通知、连接点、切点、目标对象和代理。切面是包含横切关注点(如日志记录、事务管理等)的模块化组件...

    spring2-aop.pdf

    - **Spring AOP 实现**:Spring 使用代理模式实现 AOP 功能,支持基于接口的动态代理和 CGLIB 字节码生成库。 - **Spring AOP 对 AspectJ 的支持**:Spring 允许使用 AspectJ 的注解来定义切面和切点。 - **Spring ...

    spring aop jar 包

    在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知...

    spring aop 经典例子(原创)

    Spring AOP,全称Aspect-Oriented Programming,是Spring框架中的一个重要组成部分,它引入了面向切面编程的概念,使得开发者可以将关注点分离,更好地实现业务逻辑与系统服务的解耦。在这个经典例子中,我们将深入...

    Spring AOP中文教程

    3. **易于集成**:Spring AOP可以轻松地与其他Spring特性(如依赖注入等)集成。 #### 四、Spring AOP的应用场景 Spring AOP适用于多种应用场景,包括但不限于: 1. **日志记录**:在方法调用前后自动记录日志。 ...

Global site tag (gtag.js) - Google Analytics