- 浏览: 1331720 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
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;
}
面向切面编程,实现方式有三种,最常用的是
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;
}
发表评论
-
服务端推送multipart/x-mixed-replace
2023-12-07 15:26 429往网页分批推送数据:boundary=END,总头--> ... -
使用httpclient提交post请求
2020-08-22 08:35 490import org.apache.http.HttpEnt ... -
Groovy超强的Java动态计算能力
2020-06-25 09:03 703//Groovy超强的Java动态计算能力 groovy-2. ... -
bsh(BeanShell)动态执行java代码
2020-06-25 07:59 1009import java.util.Date; /** * B ... -
延时任务处理订单超时方案
2020-05-23 16:05 1028JDK的延迟队列 方案是利用JDK自带的DelayQueue ... -
HttpsURLConnection
2020-04-29 10:51 874import java.net.URL; import jav ... -
Log4j的ConversionPattern参数的格式含义
2020-04-22 14:23 518Log4j的ConversionPattern参数的格式含义 ... -
thread 的join
2020-04-16 18:02 430java里面也有这个方法,Java Thread中, join ... -
GZIPOutputStream压缩文件
2020-04-16 17:52 805import java.io.BufferedReader; ... -
软引用SoftReference的使用
2020-04-16 15:48 593软引用SoftReference的使用 SoftRefere ... -
Fastjson
2020-04-15 14:53 418import java.util.ArrayList; imp ... -
6位随机数
2020-04-14 09:47 824import org.apache.commons.lang. ... -
Java加密和数字签名
2020-04-14 09:38 433Java加密和数字签名 消息摘要 这是一种与消息认证码结合使 ... -
DES加密、解密
2020-04-02 16:42 447import java.security.SecureRand ... -
Java利用 AES/ECB/PKCS5Padding 算法加解密
2020-04-02 11:19 1082对称加密、解密 import javax.crypto.Ci ... -
springboot中使用springmvc的拦截器-HandlerInterceptorAdapter
2018-12-13 16:04 1401springboot中使用springmvc的拦截器-Hand ... -
aspectj连接点
2018-12-13 15:55 613切点指示符 切点指示符 ... -
设计模式之策略模式
2018-05-30 21:17 570public class Person { priva ... -
使用反射将对象转Map
2018-05-27 17:33 741//使用反射将对象转Map<String, St ... -
设计模式之原型模式
2018-05-20 18:42 562/** * 原型设计模式:原型模式主要用于对象的复制 ...
相关推荐
面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。`@Aspect`是Spring AOP的核心注解,用于定义一个切面。下面我们将详细...
【Spring 框架系列(4) - 深入浅出 Spring 核心之面向切面编程(AOP)】 面向切面编程(AOP),全称为 Aspect Oriented Programming,是Spring框架的重要特性之一,用于实现代码的解耦,提高可维护性和可复用性。AOP的...
面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种模块化和声明式的方式来处理系统中的横切关注点,如日志、事务管理、安全检查等。本示例代码主要展示了如何在Spring框架...
该压缩包包含--学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:--系列博客中新需要的三个jar包。包括spring-aspects-5.2.7.RELEASE.jar和spring-aop-5.2.7.RELEASE.jar和...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice ...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对应用程序的行为进行统一管理和控制。在本实例中,我们将深入探讨如何使用AspectJ技术和XML配置来实现AOP。 首先,了解...
AspectJ是Spring AOP的重要组成部分,它提供了一种强大的、独立于语言的面向切面编程实现。本文将深入探讨Spring AOP与AspectJ的关系以及它们的核心概念和使用方法。 首先,让我们了解什么是Spring AOP。AOP...
### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...
AspectJ是面向切面编程的领头羊,它允许开发者在不破坏代码结构的前提下,分离关注点,如日志、事务管理、性能监控等,从而提高代码的可读性和可维护性。 本书针对英文读者,为那些希望掌握AspectJ并应用到实际项目...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...
学习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
面向切面编程(AOP,Aspect Oriented Programming)是Java编程中的一种重要概念,它旨在提高代码的可重用性和可维护性。AOP通过将关注点分离,使得业务逻辑和系统服务(如日志、事务管理等)可以独立发展,从而降低...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要组成部分,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、性能监控等。在传统的OOP(面向对象编程)中...
在IT行业中,Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的核心特性之一,它使得我们能够以一种声明式的方式处理系统中的横切关注点,如日志记录、事务管理、性能监控等。这个“spring-...
在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其核心特性之一,用于实现横切关注点的模块化,如日志、事务管理等。本实例将带你深入理解并实践Spring AOP与@AspectJ的结合...
Spring 提供了丰富的功能,包括但不限于依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问和集成、Web 应用开发等。在本压缩包中,包含了与Spring框架和AspectJ相关的关键组件。 首先,Spring 框架是Java...
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,主要目的是将系统中的关注点分离,比如日志记录、事务管理等通用功能,从核心业务逻辑中解耦出来。在Java领域,Spring框架提供了强大的AOP支持,...