1.需求,用户在执行某个业务方法时我们需要对这个用户进行判断是否具有权限(或者说用户是否登录了)?

例如修改用户信息,我们在update()方法前判断当前用户user是否为null(表示没有权限或者没有登录),那么现在我们的需求如果变化了就需要再次修改代码进行判断,这种开发导致修改代码频繁代码不易维护。

那么可以使用AOP-代理对象技术

客户端在调用业务bean时并不是直接调用真正的目标对象,而是调用的代理对象,代理对象其实也是目标对象的一种实现,它具有目标对象的所有对象,客户段调用时可以执行一些方法,然后再委托给目标对象(调用目标对象的方法);

2.代理有动态代理和静态代理,现在讨论使用JDK中Proxy来实现动态代理

  2.1在使用Proxy代理对象的时候,对需要代理的对象有一些要求,目标对象必须是实现了接口,及面向接口编程的。(其实就是去实现目标对象实现的所有接口)

  注意:我们说对哪些方法需要拦截,这些方法我们可以称之为横切面关注点

  2.2创建代理对象

  

  那么现在我们已经可以拦截到目标对象的方法,我们可以在invoke的方法中添加自己的代码(权限判断),如果没有权限就不执行目标对象方法(不调用method.invoke())

  

  测试

  

  我们获取代理返回回来的值时应该使用它的接口去引用它

  permission为空的时候

  

  2.3.那么在实际的开发中我们的目标对象可能没有实现接口,那么我们就不能使用JDK的动态代理,我们可以使用第三方的实现方式(CGLIB).
  

  测试

  

  2.4从上面的代码中我们可以抽出一些概念

  

  那么在这些通知的地方我们就需要我们来处理,来处理我们的业务逻辑,比如我们在service层我们可以在前置通知的地方 开启事务 在后置通知的时候提交事务 ,出现异常的时候回滚事务 在最终通知的地方释放数据库资源

3.从以上我们可以抽取出一些概念

  a.我们拦截的某一个方法我们可以看作为一个切入点

  b.许多切入点我们可以抽取出一个切面

  c.在拦截到方法时我们在不同的地方处理的事就叫做不同的通知

JDK中的Proxy技术实现AOP功能的更多相关文章

  1. (转)使用JDK中的Proxy技术实现AOP功能

    http://blog.csdn.net/yerenyuan_pku/article/details/52863780 AOP技术在企业开发中或多或少都会用到,但用的最多的大概就是做权限系统时,在做权 ...

  2. SpringBoot中使用LoadTimeWeaving技术实现AOP功能

    目录 1. 关于LoadTimeWeaving 1.1 LTW与不同的切面织入时机 1.2 JDK实现LTW的原理 1.3 如何在Spring中实现LTW 2. Springboot中使用LTW实现A ...

  3. (转)使用CGLIB实现AOP功能与AOP概念解释

    http://blog.csdn.net/yerenyuan_pku/article/details/52864395 使用CGLIB实现AOP功能 在Java里面,我们要产生某个对象的代理对象,这个 ...

  4. 基于Dynamic Proxy技术的方法AOP拦截器开发

    在面向对象编程中,会用到大量的类,并且会多次调用类中的方法.有时可能需要对这些方法的调用进行一些控制.如在权限管理中,一些用户没有执行某些方法的权限.又如在日志系统中,在某个方法执行完后,将其执行的结 ...

  5. aop学习总结一------使用jdk动态代理简单实现aop功能

    aop学习总结一------使用jdk动态代理实现aop功能 动态代理:不需要为目标对象编写静态代理类,通过第三方或jdk框架动态生成代理对象的字节码 Jdk动态代理(proxy):目标对象必须实现接 ...

  6. Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC

    一.为什么需要代理模式 假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: package com.zhangguo.Spring041.aop01; public class Mat ...

  7. JAVA中的代理技术(静态代理和动态代理)

    最近看书,有两个地方提到了动态代理,一是在Head First中的代理模式,二是Spring AOP中的AOP.所以有必要补充一下动态代理的相关知识. Spring采用JDK动态代理和CGLib动态代 ...

  8. 动态代理的两种方式,以及区别(静态代理、JDK与CGLIB动态代理、AOP+IoC)

    Spring学习总结(二)——静态代理.JDK与CGLIB动态代理.AOP+IoC   目录 一.为什么需要代理模式 二.静态代理 三.动态代理,使用JDK内置的Proxy实现 四.动态代理,使用cg ...

  9. spring AOP 之一:spring AOP功能介绍

    一.AOP简介 AOP:是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点.Aop的典型应用即spring的事务机制,日志记录.利用AOP可以对业务逻辑的 ...

随机推荐

  1. cachestat 安装文档

    安装环境:ubuntu18.04 安装步骤 1. 打开命令行,输入以下命令 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ...

  2. 【Android Studio】Frameworks detected: Android framework is detected in the project Configure

    刚开始在 Mac 上用 Android Studio, 打开第一个项目就遇到了问题,描述如下: 上午9:: Frameworks detected: Android framework is dete ...

  3. MyBatis框架之关联查询

    概述:关联查询主要在<resultMap>元素中,用<association>配置一对一.用<collection> 配置一对多 一.一对一查询       1.使 ...

  4. hdu 6397 Character Encoding (生成函数)

    Problem Description In computer science, a character is a letter, a digit, a punctuation mark or som ...

  5. webupload项目中使用

    目前项目需要一个多图上传的功能,使用LayUI并也是可以实现多图上传的,但是没有图片删除功能,参考了一下网上多图上传的插件,选择了WebUpload进行功能开发. 然而不幸的是,官方的插件并不带UI界 ...

  6. kali,ubuntu, debain DNS 配置

    kali 是基于 debain 的一个 Linux 发行版 DNS 的配置 是在文件 /etc/resolv.conf  下. 但是,我们会发现 /etc/resolv.conf 每次重启都会失效, ...

  7. 使用excel计算骰子输赢概率

    如何得到使用3个骰子掷赢4个骰子的概率(每个骰子的点数为1-6,点数一样算输) 分为3步解决: 第一步.计算n个骰子得到m点数的分布 1个骰子能得到1.2.3.4.5.6点数,每个点数出现的方式只有1 ...

  8. powerdesign进军(一)--安装破解

    目录 资源下载地址 安装powerdesign 破解powerdesign 汉化 总结 IT行业不管是web开发还是客户端开发都需要数据库,因为现在是数据时代能够拥有强大的数据就是行业的王者.目前一些 ...

  9. redis高可用之DNS篇

    1.  背景 例如,存在一套redis主从(主从节点在不同的主机上),应用程序通过主库的ip进行读写操作. 但是,主库一旦出现故障,虽然有从库,且从库提升为主库,但是应用程序如果想使用从库则必须修改配 ...

  10. cs231n---强化学习

    介绍了基于价值函数和基于策略梯度的两种强化学习框架,并介绍了四种强化学习算法:Q-learning,DQN,REINFORCE,Actot-Critic 1 强化学习问题建模 上图中,智能体agent ...