- 浏览: 188453 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
1. SpringBoot切面AOP
SpringBoot提供了强大AOP支持,这里补充说明AOP原介绍; AOP切面主要是切方法,我们一般搞一些日志分析和事务操作,要用到切面,类似拦截器; @Aspect注解是切面注解类 @Pointcut切点定义 @Before是方法执行前调用 @After是方法执行后调用 @AfterReturning方法执行返回值调用 Service层本身就可以切入事务,所以我们这类搞个常用的 切controller层方法 每个执行controller层的方法 都记录下请求Url,访问者IP 执行类方法参数等信息;
pom.xml <dependencies> <dependency> <groupId>apache-log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> src/main/java/com/andrew/aspect/RequestAspect.java package com.andrew.aspect; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.andrew.entity.Student; @Aspect @Component public class RequestAspect { private static Logger logger = Logger.getLogger(RequestAspect.class); @Pointcut("execution(public * com.andrew.controller.*.*(..))") public void log() { } @Before("log()") public void doBefore(JoinPoint joinPoint) { logger.info("方法执行前..."); ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = sra.getRequest(); logger.info("url:" + request.getRequestURI()); logger.info("ip:" + request.getRemoteHost()); logger.info("method:" + request.getMethod()); logger.info("class_method:" + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); logger.info("args:" + joinPoint.getArgs()); Student student = (Student) joinPoint.getArgs()[0]; System.out.println(student); } @After("log()") public void doAfter(JoinPoint joinPoint) { logger.info("方法执行后..."); } @AfterReturning(returning = "result", pointcut = "log()") public void doAfterReturning(Object result) { logger.info("方法返回值:" + result); } } src/main/resources/log4j.properties log4j.rootLogger=DEBUG, Console ,File #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n http://localhost:8000/studentAdd.html d 22 提交 console打印 2018-06-14 23:38:13,085 [http-nio-8000-exec-2] INFO [com.andrew.aspect.RequestAspect] - 方法执行前... 2018-06-14 23:38:13,086 [http-nio-8000-exec-2] INFO [com.andrew.aspect.RequestAspect] - url:/student/add 2018-06-14 23:38:13,086 [http-nio-8000-exec-2] INFO [com.andrew.aspect.RequestAspect] - ip:0:0:0:0:0:0:0:1 2018-06-14 23:38:13,086 [http-nio-8000-exec-2] INFO [com.andrew.aspect.RequestAspect] - method:POST 2018-06-14 23:38:13,087 [http-nio-8000-exec-2] INFO [com.andrew.aspect.RequestAspect] - class_method:com.andrew.controller.StudentController.add 2018-06-14 23:38:13,087 [http-nio-8000-exec-2] INFO [com.andrew.aspect.RequestAspect] - args:[Ljava.lang.Object;@46202a02 Student [id=null, name=d, age=22] Hibernate: select next_val as id_val from hibernate_sequence for update Hibernate: update hibernate_sequence set next_val= ? where next_val=? Hibernate: insert into t_student (age, name, id) values (?, ?, ?) 2018-06-14 23:38:13,368 [http-nio-8000-exec-2] INFO [com.andrew.aspect.RequestAspect] - 方法执行后... 2018-06-14 23:38:13,368 [http-nio-8000-exec-2] INFO [com.andrew.aspect.RequestAspect] - 方法返回值:添加成功
发表评论
-
报错Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not se
2019-02-17 12:22 4016WARN 12992 --- [ ma ... -
报错The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more t
2019-02-17 12:22 552mysql的时区错误问题: The server time ... -
报错Error executing DDL via JDBC Statement
2019-02-17 12:22 1231使用SpringDataJPA总是创建hibernate_ ... -
pom.xml报错<failOnMissingWebXml> is set to true
2019-02-15 13:47 348pom.xml报错 <failOnMissin ... -
SpringBoot表单验证
2019-02-15 09:36 3831. SpringBoot表单验证@Valid 新建项目 ... -
SpringBoot事务管理
2019-02-15 09:28 3321. SpringBoot之事物管理@Transactiona ... -
SpringBoot支持Spring Data Jpa
2019-02-15 09:10 3891. Spring Data Jpa简介 JPA(Jav ... -
SpringBoot支持MVC
2019-02-14 09:27 3051) @RequestMapping配置url映射 2) @ ... -
SpringBoot配置项目属性
2019-02-14 09:26 3841. 项目内置属性 配置文件application.pr ... -
SpringBoot导入
2019-02-13 13:33 4231. SpringBoot简介 Spring B ...
相关推荐
1.1 `@AspectJ` 切面类 1.2 `@Pointcut` 创建切入点 1.3 通知 1.4 Spring AOP 和 AspectJ AOP 有什么区别? 2. 在 SpringBoot 中使用 Aop 功能 2.0 创建一个SpringBoot项目 2.1 引入 POM 依赖 2.1.1 引入springboot ...
解决SpringBoot的AOP切面不起作用问题排查 SpringBoot中的AOP(Aspect-Oriented Programming)切面是指在业务逻辑中添加的额外功能,以实现日志记录、安全检查、事务管理等功能。但是,在实际开发中,我们可能会...
核心原理:通过自定义注解实现每个接口的描述及所在模块还有接口的操作类型,通过拦截器及访问方法后的切面aop记录接口的总耗时,在接口请求前在本地线程记录请求的参数,接口请求后记录返回参数及记录请求日志 ...
在本项目中,我们将探讨如何在SpringBoot中实现消息转换、切面编程(AOP)以及使用Redis作为缓存。 ### 消息转换 在SpringBoot中,消息转换是处理应用程序与外部系统之间数据交换的过程。Spring提供了`...
目录 SpringBoot AOP 写法一: @Before("execution(* com.bjpowernode.springboot07.javabean.Man.eat(..))") 一、AOP开发 1.1 概述 1.2使用方法 1.3创建项目并添加maven依赖 ...2.3 切面类(不一样的地方
内容概要:本文详细介绍了SpringBoot中AOP与切面编程的基础理论及其具体应用场景。首先解释了AOP的基本概念,包括切面、连接点、通知、切点等。接着讨论了AOP在SpringBoot中的作用与优势,如代码解耦、统一管理和...
Spring框架的AOP(面向切面编程)是其核心特性之一,它允许开发者在不修改原有代码的情况下,通过切面来插入额外的功能,比如日志记录、事务管理、性能监控等。在Spring AOP中,主要涉及到两个重要的库:...
为了解决这一问题,面向切面编程(Aspect-Oriented Programming,简称 AOP)应运而生。AOP 的核心思想是将分散在各处的横切关注点(如日志、事务管理、安全性检查等)集中起来进行处理,从而减少代码冗余,提高模块...
在 SpringBoot 中,AOP 可以通过使用 @Aspect 注解来标注一个类,使其成为一个切面(Aspect)。切面可以包含多个通知(Advice),这些通知可以在方法的执行前、执行后、抛出异常时等不同时机执行。例如,在本文档中...
在Spring Boot应用中,面向切面编程(AOP)是一种强大的设计模式,它允许我们以声明式的方式插入代码,比如日志记录、事务管理或权限检查。Aspect是AOP的核心概念,它封装了关注点,使得我们可以将这些关注点与业务...
SpringBoot整合AOP面向切面编程过程解析 AOP(Aspect Oriented Programming),即面向切面编程,是一种编程技术,通过预编译方式和运行期动态代理实现程序功能的统一维护。AOP是Spring框架中的一个重要内容,它通过...
1. **Spring AOP(面向切面编程)**:AOP是Spring框架的核心特性之一,它允许我们定义方法拦截器或切面来跨多个点应用横切关注点。在这里,我们使用AOP来在运行时动态改变数据源。 2. **Druid连接池**:Druid是阿里...
而AOP(Aspect Oriented Programming,面向切面编程)则是Spring框架的一个重要特性,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强或日志记录等操作。现在我们来详细探讨Spring Boot集成AOP的基本...
在本项目中,"SpringBoot+AOP日志"是一个基于Spring Boot框架的日志管理系统,它利用了Spring Boot的便利性和AOP(面向切面编程)技术来实现对应用程序日志的高效、统一处理。让我们深入探讨一下这个项目的核心知识...
AOP允许开发者定义“切面”,这些切面封装了关注点,比如日志记录、事务管理等,从而将它们与业务逻辑分离。在Spring Boot中,可以使用@Aspect注解定义切面,@Before、@After、@Around等注解控制切面何时执行。此外...
综上所述,SpringBoot结合AspectJ实现SpringAOP拦截指定方法,主要涉及到Spring AOP的原理、切点和通知的定义、自定义注解的使用,以及如何在SpringBoot项目中整合AspectJ进行更复杂的切面编程。通过这些知识点,...
在Spring Boot应用中,我们可以通过自定义注解和Spring AOP(面向切面编程)来实现这一功能。下面将详细解释这个主题。 首先,了解Spring AOP的概念。AOP是面向切面编程,它允许我们在不修改源代码的情况下,通过预...
总结:通过 Spring Boot 结合 AOP 和 Redis,我们可以轻松实现接口限流,保护系统免受过量请求的影响。这种方式既灵活又高效,能够适应各种不同的限流需求。在实践中,根据实际情况调整限流策略,结合监控工具,可以...
在Spring Boot应用中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们创建横切关注点,如日志记录、权限检查等,这些关注点可以被编织到应用程序的多个点上,而无需侵入核心业务逻辑。在本案例中,我们将...
在Spring Boot应用中,我们可以利用AOP(面向切面编程)来实现方法执行时间的统计。AOP是一种编程范式,允许我们定义横切关注点,例如日志、事务管理或性能监控,然后将这些关注点与核心业务逻辑分离。在本场景下,...