- 浏览: 1263013 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 249往网页分批推送数据:boundary=END,总头--> ... -
使用httpclient提交post请求
2020-08-22 08:35 387import org.apache.http.HttpEnt ... -
Groovy超强的Java动态计算能力
2020-06-25 09:03 588//Groovy超强的Java动态计算能力 groovy-2. ... -
bsh(BeanShell)动态执行java代码
2020-06-25 07:59 865import java.util.Date; /** * B ... -
延时任务处理订单超时方案
2020-05-23 16:05 896JDK的延迟队列 方案是利用JDK自带的DelayQueue ... -
HttpsURLConnection
2020-04-29 10:51 713import java.net.URL; import jav ... -
Log4j的ConversionPattern参数的格式含义
2020-04-22 14:23 418Log4j的ConversionPattern参数的格式含义 ... -
thread 的join
2020-04-16 18:02 313java里面也有这个方法,Java Thread中, join ... -
GZIPOutputStream压缩文件
2020-04-16 17:52 697import java.io.BufferedReader; ... -
软引用SoftReference的使用
2020-04-16 15:48 497软引用SoftReference的使用 SoftRefere ... -
Fastjson
2020-04-15 14:53 318import java.util.ArrayList; imp ... -
6位随机数
2020-04-14 09:47 702import org.apache.commons.lang. ... -
Java加密和数字签名
2020-04-14 09:38 344Java加密和数字签名 消息摘要 这是一种与消息认证码结合使 ... -
DES加密、解密
2020-04-02 16:42 357import java.security.SecureRand ... -
Java利用 AES/ECB/PKCS5Padding 算法加解密
2020-04-02 11:19 930对称加密、解密 import javax.crypto.Ci ... -
springboot中使用springmvc的拦截器-HandlerInterceptorAdapter
2018-12-13 16:04 1292springboot中使用springmvc的拦截器-Hand ... -
aspectj连接点
2018-12-13 15:55 511切点指示符 切点指示符 ... -
设计模式之策略模式
2018-05-30 21:17 480public class Person { priva ... -
使用反射将对象转Map
2018-05-27 17:33 647//使用反射将对象转Map<String, St ... -
设计模式之原型模式
2018-05-20 18:42 455/** * 原型设计模式:原型模式主要用于对象的复制 ...
相关推荐
该压缩包包含--学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:--系列博客中新需要的三个jar包。包括spring-aspects-5.2.7.RELEASE.jar和spring-aop-5.2.7.RELEASE.jar和...
学习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”,即面向切面编程,它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效率。AOP 采取横向抽取机制,取代了传统纵向继承...
} }用 AspectJ 注解声明切面:要在 Spring 中声明 AspectJ 切面, 只需要在 IOC 容器中将切面声明为 Bean 实例. 当在 Spr
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是...
pring源代码各个模块作用 核心模块: 1 spring-core:核心模块 依赖注入IOC和DI的最基本实现 ...spring-aop:面向切面编程,CGLB,JDKProxy spring-aspects:集成AspectJ,Aop应用框架 spring-instrume
在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档...
Spring AOP(面向切面编程)是Java高级编程中的重要组成部分,它允许程序员以声明的方式处理关注点(例如日志、事务管理等),而不是通过硬编码。本文深入分析了Spring AOP的实现机制,让读者能够更好地理解和应用这...
在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档...
在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档...
在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档...
2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的...
10.面向切面编程AOP 11.手写AOP框架 12.Spring支持的AOP的实现 13.AOP常用的术语 14.什么是AspectJ框架 15.AspectJ常见通知类型 16.AspectJ 的切入点表达式(掌握) 17.AspectJ的前置通知@Before .... .... ....
Spring Framework简介:了解Spring框架的核心理念,包括依赖注入(DI)和面向切面编程(AOP)。 Spring Boot:熟悉Spring Boot,知道如何创建和管理Spring Boot项目,以及如何使用Spring Boot的自动配置功能。 ...
2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving...
总的来说,@Pointcut注解是Spring Boot AOP中非常有用的一部分,它允许我们轻松地定义切点并应用通知来实现面向切面编程。通过这种方式,我们可以有效地在应用程序中实现横切关注点的功能,提高代码的可维护性和重用...
1.spring-aop:面向切面AOP编程中需要使用。声明式事物也用到此包。 2.spring-aspects:提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。 3.spring-beans:基础jar包,它包含...
Spring面向切面编程,提供AOP实现。Spring Beans之上将横切关注点模块化 2. spring-aspects-4.1.1.RELEASE.jar 提供的对AspectJ框架的整合,也是A面向切面编程。 AspectJ可用于基于普通Java对象的模块化 注意:...
Spring就是其中之一,可以完成面向切面编程。然而,AspectJ也实现了AOP的功能,且其实现方式更为简捷,使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ的对于AOP的实现也引入到了自己的框架中。
二、 利用动态代理实现面向切面编程 20 第八课:Spring AOP配置选项 21 一、 AOP配置annotation方式 21 (一) 搭建annotation开发环境 21 (二) aspectJ类库 22 (三) AOP的annotation实例 22 (四) AspectJ的专业术语 ...