`

Spring AOP入门 (三)基于Annotation

阅读更多
这里讲如何使用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基于annotation注解练习

    Spring AOP简单demo

    **Spring AOP 简介** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要模块,它扩展了传统的面向对象编程,允许开发者定义“横切关注点”(cross-cutting concerns),如日志、事务...

    spring aop注解版

    在本主题中,我们将深入探讨Spring AOP的注解版,它是基于Java注解的实现,简化了配置并提高了代码的可读性。 首先,让我们理解AOP的基本概念。AOP是一种编程范式,允许程序员定义“切面”,这些切面封装了跨越多个...

    Spring_02_入门篇_AOP_简单实例

    **Spring AOP 入门篇:面向切面编程的注解与XML模式** 在软件开发中,Spring框架因其强大的功能和灵活性而广受欢迎,尤其是在企业级应用开发中。本教程将深入探讨Spring中的核心概念之一——面向切面编程(Aspect-...

    jdk6.0从入门到精通-----chapter16反射机制-spring AOP

    Spring AOP有两种实现方式:基于代理(proxy-based)和基于注解(annotation-driven)。基于代理的AOP通过JDK动态代理或CGLIB生成目标对象的代理,拦截并执行通知。注解驱动的AOP则是利用Spring的`@Aspect`注解来...

    Spring @AspectJ 实现AOP 入门例子

    本篇文章将深入探讨如何利用Spring的@AspectJ注解来实现AOP,这是一个入门级别的例子,旨在帮助开发者理解并掌握这一关键特性。 首先,我们要明白什么是AOP。面向切面编程是一种编程范式,它允许程序员定义“切面”...

    spring的入门程序示例

    本示例旨在引导初学者入门Spring框架,通过一个简单的应用实例来理解其核心概念。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。依赖注入...

    IDEA中使用Spring的简单入门(加小案例)

    在本文中,我们将深入探讨如何在IntelliJ IDEA(IDEA)中使用Spring框架进行简单的入门。Spring是一个广泛使用的开源Java框架,它为构建企业级应用程序提供了强大的支持,包括依赖注入、面向切面编程(AOP)、事务...

    AOP入门

    **AOP入门** AOP(Aspect Oriented Programming,面向切面编程)是软件开发领域的一种设计模式,它旨在提高代码的可复用性,降低模块间的耦合度。AOP的核心概念是切面(Aspect),它封装了横切关注点,如日志、事务...

    spring WEB入门级项目搭建

    在本教程中,我们将深入探讨如何搭建一个基于Spring框架的Web入门级项目,重点是使用Spring MVC和Spring JDBC实现简单的用户登录功能。Spring是一个广泛使用的Java企业级应用框架,而Spring MVC是它的一个核心模块,...

    基于annotation的SpringMVC入门小例子

    **基于Annotation的SpringMVC入门小例子** 在Java Web开发中,SpringMVC是一个非常流行的框架,它使得构建Web应用程序变得更加简洁和高效。本篇将详细介绍如何使用注解(Annotation)来配置和运行一个基本的...

    SpringActiveMQ入门示例

    SpringActiveMQ入门示例是关于如何在Java环境中利用Spring框架与Apache ActiveMQ集成的一个实践教程。这个示例主要适用于开发者想要了解如何在Spring应用中使用消息队列进行异步通信和解耦。在这个项目中,开发环境...

    spring教程,spring入门

    Spring框架是Java开发中的一个核心框架,以...以上就是Spring框架的一些基础知识点,从入门到精通,需要不断学习和实践,逐步掌握其精髓。通过Spring教程和笔记,你可以深入理解并运用这些知识,提升你的Java开发能力。

    spring boot入门.txt

    3. **基于切面 (AOP) 和惯例进行声明式编程**:AOP 是一种编程范式,允许将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,使得业务逻辑更加清晰。 4. **通过切面和模板减少样板代码**:Spring 提供了...

    Spring MVC入门Demo

    Spring MVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。本入门Demo将帮助初学者快速理解并掌握 Spring MVC 的基本...

    spring-framework-reference

    Spring框架是一个开源的Java平台,它为现代基于Java的企业应用程序开发提供全面的编程和配置模型。Spring框架包含了许多模块,这些模块覆盖了各种开发需求,从核心容器(Core Container)到数据访问/集成(Data...

    Spring3.1 入门代码

    【Spring3.1 入门代码】这篇教程主要面向初学者,旨在引导他们入门Spring MVC框架,通过官网提供的实例代码和教程文档,帮助学习者掌握Spring的基础应用。在这个过程中,理解Spring的核心概念如依赖注入(Dependency...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘3.zip

    047-spring-aop-annotation快速实现.mp4 048-spring-aop-获取切点详细信息.mp4 049-spring-aop-切点表达式语法.mp4 050-spring-aop-统一切点管理.mp4 051-spring-aop-环绕通知.mp4 052-spring-aop-切面优先级...

Global site tag (gtag.js) - Google Analytics