`

spring之AspectJ面向切面编程

    博客分类:
  • java
阅读更多
spring之AspectJ面向切面编程

面向切面编程,实现方式有三种,最常用的是

1、实现InvocationHandler接口:这样需要根据代理的类

2、基于Spring 的AOP方式:这种和实现接口一样,也需要有个新的类来代理

3、基于Aspectj + 自定义注解来实现,这个很完美,对外调用不需要重写类

使用Aspectj注解实现切面编程

增加jar包:
dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.9</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>
       
切面:
//使用@Aspect实现面向切面编程:如controller方法调用的耗时
@Aspect
@Component
public class TimerAspectInterceptor {

private Logger logger = LoggerFactory.getLogger(TimerAspectInterceptor.class);

@Pointcut("execution(* cn.web.controller.UserController..*(..))")
public void controllerMethodPointCut() {

}

//匹配那些有指定注解的连接点@Logable(带用这个注解的所有方法作为连接点)
@Pointcut("@annotation(cn.web.controller.Logable)")
public void multiMethodPointCut() {

}

/*@Before(value="controllerMethodPointCut()")
public void before2(JoinPoint point) {
Object[] args = point.getArgs();
logger.info("before..args={}", args.length);
}
@Before(value = "beforePointcut(param)", argNames = "param") 
public void beforeAdvice(String param) { 
          System.out.println("===========before advice param:" + param); 
}

@After("controllerMethodPointCut()")
public void after() {
logger.info("after..");
}

@AfterReturning(value = "controllerMethodPointCut()")
public void afterReturn() {
logger.info("afterReturn..");
}
*/
@AfterThrowing(value = "controllerMethodPointCut()")
public void afterThrow() {
logger.info("afterThrow..");
}

//@Around(value = "controllerMethodPointCut() || multiMethodPointCut()")
//@Around(value = "controllerMethodPointCut()")
@Around("multiMethodPointCut()") //环饶通知如果原有抛出异常,会调用afterThrow()
public void aroundControllerMethod(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
//回调目标的原有方法
joinPoint.proceed();
logger.info("op=look method={} cost={}", joinPoint.getSignature().getName(),
System.currentTimeMillis() - start);
}

}

连接点:
使用注解作为连接点

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Logable {
//long timeoutMillis() default 0;
}
0
0
分享到:
评论

相关推荐

    AOP_使用spring框架进行面向切面编程

    面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...

    spring4 AOP 面向切面编程@Aspect

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。`@Aspect`是Spring AOP的核心注解,用于定义一个切面。下面我们将详细...

    Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP).doc

    【Spring 框架系列(4) - 深入浅出 Spring 核心之面向切面编程(AOP)】 面向切面编程(AOP),全称为 Aspect Oriented Programming,是Spring框架的重要特性之一,用于实现代码的解耦,提高可维护性和可复用性。AOP的...

    Spring面向切面编程示例代码

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种模块化和声明式的方式来处理系统中的横切关注点,如日志、事务管理、安全检查等。本示例代码主要展示了如何在Spring框架...

    spring-AOP面向切面编程所需jar包.zip

    该压缩包包含--学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:--系列博客中新需要的三个jar包。包括spring-aspects-5.2.7.RELEASE.jar和spring-aop-5.2.7.RELEASE.jar和...

    Spring AOP面向切面三种实现

    在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...

    Java Spring AOP 面向切面编程的4种实现

    Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice ...

    spring的aop切面编程实例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对应用程序的行为进行统一管理和控制。在本实例中,我们将深入探讨如何使用AspectJ技术和XML配置来实现AOP。 首先,了解...

    spring aspectj.jar

    AspectJ是Spring AOP的重要组成部分,它提供了一种强大的、独立于语言的面向切面编程实现。本文将深入探讨Spring AOP与AspectJ的关系以及它们的核心概念和使用方法。 首先,让我们了解什么是Spring AOP。AOP...

    AOP面向切面编程总结

    ### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...

    Manning - AspectJ in Action切面编程详解-书签文字英文版

    AspectJ是面向切面编程的领头羊,它允许开发者在不破坏代码结构的前提下,分离关注点,如日志、事务管理、性能监控等,从而提高代码的可读性和可维护性。 本书针对英文读者,为那些希望掌握AspectJ并应用到实际项目...

    spring AOP切面编程

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...

    SpringAOP切面编程依赖jar包.rar

    学习Spring开发的AOP面向切面编程时所需要的jar包,包括com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

    java面向切面编程

    面向切面编程(AOP,Aspect Oriented Programming)是Java编程中的一种重要概念,它旨在提高代码的可重用性和可维护性。AOP通过将关注点分离,使得业务逻辑和系统服务(如日志、事务管理等)可以独立发展,从而降低...

    16.2 Spring框架-AOP面向切面编程

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要组成部分,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、性能监控等。在传统的OOP(面向对象编程)中...

    spring-aop面向切面系统日志案例

    在IT行业中,Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的核心特性之一,它使得我们能够以一种声明式的方式处理系统中的横切关注点,如日志记录、事务管理、性能监控等。这个“spring-...

    Spring AOP @AspectJ 入门实例

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其核心特性之一,用于实现横切关注点的模块化,如日志、事务管理等。本实例将带你深入理解并实践Spring AOP与@AspectJ的结合...

    JavaSpring的依赖包(包含切面AspectJ)

    Spring 提供了丰富的功能,包括但不限于依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问和集成、Web 应用开发等。在本压缩包中,包含了与Spring框架和AspectJ相关的关键组件。 首先,Spring 框架是Java...

    面向切面编程(注解式)---实现请求,返回日志的自动打印

    面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,主要目的是将系统中的关注点分离,比如日志记录、事务管理等通用功能,从核心业务逻辑中解耦出来。在Java领域,Spring框架提供了强大的AOP支持,...

Global site tag (gtag.js) - Google Analytics