- 浏览: 498564 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
Spring AOP(面向方面编程)
动态代理实现思路:
1.就是在运行时,动态生成一个类文件(被代理对象子类),在被代理对象要插入(织入)的地方加入代理的代码。
2.再编译这这个类文件生成一个类,并生成一个实例返回。
3.当运行实例时就可以运行你的代理代码了
AOP知识点:
1.AOP(Aspect-OrientedProgramming)面向方面编程,与OOP(面向对象)完全不同,使用AOP编程系统被分为方面或关注点,而不是OOP中的对象。
2.聚合就是一个类初始化时传入另一个类,类里面对传入这个类进行操作(一个类里面调用另一个对象)
3.JDK动态代理,实现了接口的类(没有实现接口的类是不行的)
4.CGLIB动态代理,针对类来实现代理,对指定目标类产生一个子类,通过方法拦截(intercept)所有父类方法的调用
5.AOP则将这些代码整理起来,将解决某个切面问题的代码单独的放在某个java文件中,然后再动态织入到程序中。
AOP中的术语:
1.Aspect:(方面)把散落在系统各处与横切关注点相关的重复代码抽取出来归整到一处形成一个模块,我们称为方面。就是一个java,里面实现了要在切入点执行的代码。
2.Joinpoint:(连接点),程序运行过程中的某一点.比如方法调用、属性访问、异常抛出。就是插入代理代码的位置。
3.Pointcut:(切入点), 一组连接点(类似于过滤器的匹配规则 )
4.Advice:(增强), 在不修改原有代码的前提下,为某一个对象增加新的功能,就是Aspect中的方法代码,要加入什么功能。
5.Weave:(织入),将方面加入到(拦截器)方法中为对象增加额外功能的过程称为织入,就是加入代理代码到被代理代码中的过程
6.Proxy:(代理对象),就是通过何种方式进行完成这种代码织入的
7.Target:(目标对象),需要被增强功能的对象称之为目标对象,也被称为被增强或被代理对象。
AOP织入位置:
1.before:在某连接点(JoinPoint)之前执行。(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
2.after:当某连接点退出的时候执行(不论是正常返回还是异常退出),每次都在finally退出时的点织入(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
3.AfterReturning:在某连接点正常完成后执行,不包括抛出异常的情况。(执行完after才到AfterReturning),每次都在Return前的点织入(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
4.afterThrowing:在方法抛出异常退出时执行。after先于afterThrowing执行,每次都在Exception退出时的点织入(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
5.Around:包围一个连接点的通知,在方法执行前后和抛出异常时执行,相当于综合了以上三种;(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
6.Around先于before织入,所以先运行Around再到before
7.Around先于after织入,所以先运行Around再到after
类似于这样:
例子:
参考原文:http://www.cnblogs.com/yangyquin/p/5462488.html
参考原文(拦截点配置):http://www.blogjava.net/supercrsky/articles/174368.html
动态代理实现思路:
1.就是在运行时,动态生成一个类文件(被代理对象子类),在被代理对象要插入(织入)的地方加入代理的代码。
2.再编译这这个类文件生成一个类,并生成一个实例返回。
3.当运行实例时就可以运行你的代理代码了
AOP知识点:
1.AOP(Aspect-OrientedProgramming)面向方面编程,与OOP(面向对象)完全不同,使用AOP编程系统被分为方面或关注点,而不是OOP中的对象。
2.聚合就是一个类初始化时传入另一个类,类里面对传入这个类进行操作(一个类里面调用另一个对象)
3.JDK动态代理,实现了接口的类(没有实现接口的类是不行的)
4.CGLIB动态代理,针对类来实现代理,对指定目标类产生一个子类,通过方法拦截(intercept)所有父类方法的调用
5.AOP则将这些代码整理起来,将解决某个切面问题的代码单独的放在某个java文件中,然后再动态织入到程序中。
AOP中的术语:
1.Aspect:(方面)把散落在系统各处与横切关注点相关的重复代码抽取出来归整到一处形成一个模块,我们称为方面。就是一个java,里面实现了要在切入点执行的代码。
2.Joinpoint:(连接点),程序运行过程中的某一点.比如方法调用、属性访问、异常抛出。就是插入代理代码的位置。
3.Pointcut:(切入点), 一组连接点(类似于过滤器的匹配规则 )
4.Advice:(增强), 在不修改原有代码的前提下,为某一个对象增加新的功能,就是Aspect中的方法代码,要加入什么功能。
5.Weave:(织入),将方面加入到(拦截器)方法中为对象增加额外功能的过程称为织入,就是加入代理代码到被代理代码中的过程
6.Proxy:(代理对象),就是通过何种方式进行完成这种代码织入的
7.Target:(目标对象),需要被增强功能的对象称之为目标对象,也被称为被增强或被代理对象。
AOP织入位置:
1.before:在某连接点(JoinPoint)之前执行。(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
2.after:当某连接点退出的时候执行(不论是正常返回还是异常退出),每次都在finally退出时的点织入(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
3.AfterReturning:在某连接点正常完成后执行,不包括抛出异常的情况。(执行完after才到AfterReturning),每次都在Return前的点织入(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
4.afterThrowing:在方法抛出异常退出时执行。after先于afterThrowing执行,每次都在Exception退出时的点织入(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
5.Around:包围一个连接点的通知,在方法执行前后和抛出异常时执行,相当于综合了以上三种;(多个时名字排序先的织入到最里面,就是名字排序先的先运行)
6.Around先于before织入,所以先运行Around再到before
7.Around先于after织入,所以先运行Around再到after
类似于这样:
AroundA AroundB beforeA; beforeB; try { AfterReturningA; AfterReturningB; Target AroundB AroundA AfterReturningA; AfterReturningB; } catch (Exception e) { afterThrowingA; afterThrowingB; }finally { afterA; afterB; }
例子:
package com.SpringAop; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.SpringAop.Object.ObjectTest; //@RunWith(BlockJUnit4ClassRunner.class) public class SpringAopMain { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); System.out.println("Start"); ObjectTest objectTest = (ObjectTest) applicationContext.getBean("objectTest"); objectTest.objectTest(); } }
package com.SpringAop.Proxy; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Component //定义组件 @Aspect //注解定义一个Pointcut(切面或切入点) public class ProxyAop { // 定义一个Pointcut(切入点)这样后面就不用每个都写"execution(* com.xing..*.*(..))" @Pointcut("execution(* com.SpringAop..*.*(..))") public void pointCut() { }; @AfterReturning("pointCut()") public void afterReturning() { System.out.println("ProxyAop pointCut afterReturning"); } @AfterThrowing("pointCut()") public void cfterThrowing() { System.out.println("ProxyAop pointCut afterThrowing"); } @Before("pointCut()") public void beforec() { System.out.println("ProxyAop pointCut before"); } @After("pointCut()") public void after() { System.out.println("ProxyAop pointCut after"); } @Around("pointCut()") public Object around(ProceedingJoinPoint pjp) throws Throwable { System.out.println("ProxyAop pointCut around pjp.proceed before"); Object obj = pjp.proceed(); System.out.println("ProxyAop pointCut around pjp.proceed after"); System.out.println("ProxyAop pointCut Around Object == " + obj); return obj; } }
package com.SpringAop.Object; import org.springframework.stereotype.Service; @Service("objectTest") public class ObjectTest { public void objectTest() { System.out.println("objectTest"); // throw new RuntimeException(); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="com.SpringAop" /> <!-- AOP注解解析引入 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans>
参考原文:http://www.cnblogs.com/yangyquin/p/5462488.html
参考原文(拦截点配置):http://www.blogjava.net/supercrsky/articles/174368.html
发表评论
-
选举算法
2022-06-17 08:48 434选举算法 常用的选举 ... -
elasticSearch使用
2022-04-27 08:42 421ElasticSearch 基于Apache Lucene构建 ... -
IDEA 快捷键
2022-03-02 16:55 249大小写转换快捷键 ctr+shift+u IDEA ... -
zookeeper dubbo 安装
2021-12-04 19:27 322docker-machine ssh default d ... -
将博客搬至CSDN
2021-11-18 19:57 194将博客搬至CSDN -
docker mysql 主从安装
2021-11-10 16:55 240docker run -d -p 13306:3306 --n ... -
rocketmq安装部署.txt
2021-11-07 19:10 219docker search rocketmq docke ... -
百度人脸识别
2021-05-21 16:11 366package com.gaojinsoft.htwy.y20 ... -
springBoot tomcat配置参数说明
2021-05-12 09:13 3027#最大连接数 server.tomcat.max-connec ... -
技术选型
2021-01-29 17:34 2971.移动端组件vux,vant,vant好点,文档好的,基于v ... -
方便开发调试和问题跟踪
2021-01-01 10:17 2501.外网最好可以连接数据库 2.关键信息可以在接口返回信息, ... -
log4j2应用
2020-07-23 14:16 367https://blog.csdn.net/giventian ... -
文件上传下载
2020-07-06 13:16 4241.文件ID,名字(源,目标),大小,路径(/aa/bb/s. ... -
Jenkins脚本
2020-03-12 17:55 446#!/bin/bash -ilx echo "开始 ... -
base64与file 相互转换
2019-10-23 18:19 783base64与file 相互转换 import org. ... -
钉钉开发
2019-09-17 20:16 436钉钉开发 开发者帐号 1357047443 x***310* ... -
spring MVC 下载文件
2019-07-18 16:36 490@RequestMapping (value="/d ... -
安卓模拟器使用
2019-07-03 23:13 4逍遥pc版的安卓模拟器 http://www.xyaz.cn/ ... -
ZLTest
2019-03-19 23:41 269ZLTest -
要同步回来的文件
2019-01-25 11:14 0Spring Boot中整合Sharding-JDBC m ...
相关推荐
### Spring AOP面向方面编程原理详解 #### 一、引言与定义 Spring AOP(Aspect Oriented Programming)是Spring框架中的一个核心组件,用于实现面向切面编程。AOP是一种编程范式,旨在将横切关注点(Cross-cutting...
### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程...
Java Spring AOP(面向方面编程)是Spring框架中的一个重要特性,它允许开发者通过定义切面来模块化横切关注点,如日志、事务管理、性能监控等。这些关注点通常会分散在应用程序的各个部分,AOP提供了一种集中处理...
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
JAVA Spring AOP面向切面编程笔记
在讨论Spring AOP(面向切面编程)时,首先需要理解几个核心概念。Spring AOP 是Spring框架提供的一个功能模块,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中解耦出来,通过在方法调用前后进行...
Spring AOP(Aspect Oriented Programming,面向切面...总的来说,Spring AOP通过提供面向切面的编程能力,极大地提高了代码的可复用性和可维护性,降低了系统复杂度,特别是在处理共性问题如日志、事务、安全等方面。
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...
在Java世界中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许我们分离关注点,将横切关注点(如日志、事务管理、性能监控等)与业务逻辑代码解耦。Spring框架中的AOP模块提供了实现...
面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种优雅的方式来处理系统的横切关注点,如日志、事务管理、性能监控和权限控制等。在Spring中,AOP主要通过代理模式实现,...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
Spring框架的关键组件之一是面向方面编程(AOP)框架。 面向方面的编程需要将程序逻辑分解成不同的部分。 此教程将通过简单实用的方法来学习Spring框架提供的AOP/面向方面编程。
Spring AOP,全称为Aspect Oriented Programming,是面向切面编程的一种编程范式,它是对传统的面向对象编程(OOP)的一种补充。在OOP中,核心是对象,而在AOP中,核心则是切面。切面是关注点的模块化,即程序中的...
Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice ...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...
AOP 的全称是“Aspect Oriented Programming”,即面向切面编程,它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效率。AOP 采取横向抽取机制,取代了传统纵向继承...
**Spring AOP 面向切面编程详解** 在Java世界中,Spring框架以其强大的功能和易用性闻名,其中一个核心特性就是面向切面编程(Aspect-Oriented Programming,简称AOP)。AOP是为了解决传统面向对象编程中横切关注点...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...