`
y806839048
  • 浏览: 1107433 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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

阅读更多

 

 

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

 

 

Pointcut  切点  用方法作为一系列要准备植入地的别名  (所有的方法路径就是切面)

 

Around  Before  AfterReturning  通知织入到某些切点--此时的切点就用这个方法别名了

 

 

 

 

示例:

 

 

配置文件:

 

 

 

<!-- 启动对@AspectJ注解的支持  -->

    <aop:aspectj-autoproxy proxy-target-class="true"/>

 

 

@Component

@Aspect

public class LogAopAspect {

 

 //execution  切面的路径表达方式,@within  切面的注解表达方式

  @Pointcut("execution(* com.houbank.incoming.web.controller..*(..)) and  @within(org.springframework.web.bind.annotation.Controller)")

    private void anyAcesssAndResponseMethdod() {

    }

 

    @Autowired

    private HttpServletRequest request;

 

    @Around("anyAcesssAndResponseMethdod()")

    public Object notifyLog(ProceedingJoinPoint joinPoint) throws Throwable {

 

}

 

 

 

 

}

 

 

 又如:

 

@Component

@Aspect

public class MonitorAdvise {

 

@Pointcut("@within(org.springframework.web.bind.annotation.RestController)")

public void apiMethod() {

}

 

@Pointcut("execution(* com.houbank.bank.*.service.*.*(..)))")

public void serviceMethod() {

}

 

@Around("apiMethod() || serviceMethod()")

@Monitor

public Object aroundExecuteApiMethod(ProceedingJoinPoint pJoinPoint) throws Throwable {

return MethodInvocationAspect.aspectMonitorAnnotation(pJoinPoint);

}

 

}

 

 

================切面也可传参数============

 

 

package com.houbank.xloan.core.db;

 

import org.apache.commons.lang3.StringUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.springframework.core.annotation.Order;

import org.springframework.stereotype.Component;

 

@Component

@Aspect

@Order(1)

// order设置为1.保证在配置@Transactional时,优于事务进行切面

public class MultipleDataSourceAspectAdvice {

 

private Log logger = LogFactory.getLog(MultipleDataSourceAspectAdvice.class);

 

// 所有service接口的

@Around("@annotation(dbRoute) &amp;&amp;execution(* com.houbank.xloan.api.service.*.*(..))")

public Object doAround(ProceedingJoinPoint point, DbRoute dbRoute)

throws Throwable {

Object retVal = null;

try {

 

Object target = point.getTarget();

String method = point.getSignature().getName();

Class<?> classz = target.getClass();

// 打印log

if (logger.isDebugEnabled()) {

logger.debug(String

.format("class %s,method %s", classz, method));

}

// 设置路由数据源

if (dbRoute != null && StringUtils.isNotEmpty(dbRoute.value().getValue())) {

DbContextHolder.setDataSourceType(dbRoute.value().getValue());

}

 

retVal = point.proceed();

 

} catch (Exception e) {

// e.printStackTrace();

throw e;// 确保抛出异常

} finally {

// 环绕通知后,恢复数据源为默认

DbContextHolder.setDataSourceType(DbEnum.DEFAULT_DATA_SOURCE);

}

return retVal;

}

}

分享到:
评论

相关推荐

    aop 面向切面编程 demo

    面向切面编程(AOP)是一种编程范式,它旨在将关注点分离,使得系统中的核心业务逻辑与系统服务(如日志、事务管理、权限控制等)可以解耦。在Android开发中,AOP的应用可以帮助我们更好地组织代码,提高可维护性和...

    Spring mvc mybatis plus 实现AOP 切面日志系统

    在IT行业中,Spring MVC、MyBatis Plus以及AOP(面向切面编程)是Java Web开发中的重要组件,常用于构建高效、灵活的企业级应用。本项目“Spring MVC Mybatis Plus 实现AOP 切面日志系统”旨在提供一个基础的日志...

    java面向切面编程

    面向切面编程(Aspect-Oriented Programming,AOP)是Java开发中的一种重要技术,它主要解决了传统面向对象编程中的横切关注点问题。在OOP中,业务逻辑与系统服务(如日志、事务管理等)往往交织在一起,使得代码...

    基于切面的日志记录SSMdemo

    本文将深入探讨“基于切面的日志记录SSMdemo”,这是一个结合了Spring、SpringMVC和MyBatis框架,并利用AOP(面向切面编程)实现日志功能的简单学习案例。 首先,我们来了解SSM框架。SSM是Spring、SpringMVC和...

    Spring框架+Spring工作原理+AOP面向切面编程+JDK代理+Cglib代理

    - **面向切面编程**(AOP)是一种编程范式,它允许开发者将跨多个对象的公共行为(如日志记录、安全检查等)定义为“切面”,并通过配置而非显式编程将其添加到应用程序中。 #### 五、Spring MVC的工作流程 Spring...

    springmvc log4j2 logback 注解 jackson 日志脱敏实现源码

    在日志脱敏场景下,开发者可以在敏感字段上添加注解,然后在运行时通过AOP(面向切面编程)或者其他处理机制自动执行脱敏逻辑。这种方式使得代码更加整洁,也易于维护。 这些实现可以为开发者提供灵活的选择,根据...

    加入切面环绕通知实现,日志比较完善的使用方式

    在Spring AOP(面向切面编程)中,切面环绕通知是一种强大的机制,它允许我们在方法执行前后插入自定义的行为,比如记录日志、事务管理等。本篇将深入探讨如何利用Spring AOP的切面环绕通知来实现一个日志记录系统,...

    springboot 用aop打印web请求参数信息例子

    Spring AOP(面向切面编程)提供了一种优雅的方式来实现这一需求,它允许我们在不修改原有代码的情况下,插入额外的功能。本教程将通过一个具体的例子来介绍如何使用Spring AOP在Spring Boot中打印Web请求的参数信息...

    SSM整合-用springaop-demo01实现了注解AOP,SSM-MybatisOneForOne-demo01实现了

    1. **Spring AOP(面向切面编程)**: - **AOP概念**:AOP是Spring框架的核心特性之一,它允许程序员定义“切面”,这些切面可以包含业务逻辑的某一部分,如日志、事务管理等。切面可以在程序运行时“织入”到其他...

    使用使用切面的方式记录日志springMvc + hibernate

    在IT行业中,Spring框架是Java开发中的一个核心组件,它提供了丰富的功能,包括依赖注入、面向切面编程(AOP)以及与各种技术的集成,如Spring MVC和Hibernate。本项目"使用切面的方式记录日志springMvc + hibernate...

    android面向切面AOP demo

    面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,它旨在提高代码的可维护性和可重用性,通过将关注点(如日志、事务管理等)从核心业务逻辑中分离出来。在Android开发中,AOP也被广泛应用于处理如...

    草稿:SSM整合-用springaop-demo01实现了注解AOP,SSM-MybatisOneForOne-demo01实现

    AOP(面向切面编程)是Spring框架的重要特性,它允许程序员定义“切面”,即关注点的模块化,如日志、事务管理等。在Spring中,我们可以通过注解来声明切面,例如`@Aspect`、`@Before`、`@After`、`@Around`和`@...

    Android-logging-aspect项目中日志收集实现AOP和Listener两种全局实现

    在"Android-logging-aspect"项目中,提供了一种高效且灵活的日志收集方式,通过AOP(面向切面编程)和Listener两种全局实现。下面我们将详细探讨这两种方法。 首先,AOP(面向切面编程)是一种编程范式,它允许...

    spring aop切面拦截指定类和方法实现流程日志跟踪

    为了解决这一问题,可以利用Spring框架中的AOP(Aspect Oriented Programming,面向切面编程)技术来实现。 #### 二、Spring AOP 概述 Spring AOP 是Spring框架提供的一种实现AOP的方法。通过AOP,开发者可以在不...

    微服务请求日志统一处理方案

    这通常通过AOP(面向切面编程)来实现,比如使用Spring AOP的切面来拦截方法的调用,然后在进入和离开方法时记录日志。在方法的入口,记录请求参数;在方法执行后,记录响应结果和处理耗时,同时可以通过`...

    AspectJ Java方面的集合,以促进面向方面的编程模式、日志记录、缓存验证等.zip

    面向切面编程是一种编程范式,旨在提高代码的模块化,通过将关注点分离,比如日志记录、事务管理、性能监控、缓存等,从核心业务逻辑中解耦出来。AspectJ通过提供一种称为“方面”的新组件来实现这一目标,这些方面...

    SpringAop面向切片

    **Spring AOP 面向切面编程详解** 在Java世界中,Spring框架以其强大的功能和易用性闻名,其中一个核心特性就是面向切面编程(Aspect-Oriented Programming,简称AOP)。AOP是为了解决传统面向对象编程中横切关注点...

    ssh+aop+log4j+日志拦截器+注解

    Spring提供了强大的事务管理、AOP(面向切面编程)等功能,Struts则负责处理HTTP请求并调度控制器,而Hibernate则简化了数据库操作,实现了对象与数据库表之间的映射。 2. AOP(面向切面编程):AOP是Spring框架的...

    spring-boot入门实例(jpa+postgresql+aop实现valid切面式校验)

    这个入门实例将向我们展示如何使用Spring Boot与JPA(Java Persistence API)、PostgreSQL数据库以及AOP(面向切面编程)来实现数据验证。 首先,让我们详细了解一下Spring Boot。Spring Boot的核心理念是“约定...

Global site tag (gtag.js) - Google Analytics