-
--------------------------------------------申明一个接口 这个是非常重要的---------------------------------------
-
publicinterfaceIUser{
-
publicvoidaddUser(UserBeanuser);
-
publicStringfindUserById(intstuId);
- }
-
------------------------------------------写个类实现这个接口-----------------------------------------------------------
-
publicclassUserImplimplementsIUser{
-
publicvoidaddUser(UserBeanuser){
-
System.out.println("-----------addUser------------");
- }
-
publicStringfindUserById(intstuId){
-
System.out.println("-----------findUser------------");
-
return"Jeson";
- }
- }
---------------------------------------------------------------------------------------------------------------------------------------
下面我要在增和查的方法执行前做权限验证(securityCheck)
但是传统的写法是在调用的方法前写上这个方法 但是每个方法都写 不管是在开发期间还是维护期间都很麻烦
那我们完全可以写个动态代理 为我们的方法实现类创建动态代理 这样无需我们关注一些公共的代码 比如 权限验证啊 日志写入之类的 我们只要关注我们自己的逻辑代码就行了
具体实现如下
------------------------------------------------------创建动态代理----------------------------------------------------------
-
publicclassSecurityHandlerimplementsInvocationHandler{
-
-
privateObjectobjectTarget;
-
publicObjectgetNewObjectProxy(ObjectobjectTarget)
- {
-
this.objectTarget=objectTarget;
-
returnProxy.newProxyInstance(objectTarget.getClass().getClassLoader(),objectTarget.getClass().getInterfaces(),this);
-
-
- }
-
publicObjectinvoke(Objectobject,Methodmethod,Object[]objs)throwsThrowable{
- checkSecurity();
-
Objectret=null;
-
try
- {
- ret=method.invoke(objectTarget,objs);
-
}catch(Exceptione)
- {
- e.printStackTrace();
- }
-
returnret;
- }
-
publicvoidcheckSecurity()
- {
-
System.out.println("----------securitychecking---------------");
- }
- }
-------------------------------------------------------测试----------------------------------------------------------
-
publicclassDynamicProxy{
-
-
publicstaticvoidmain(String[]args){
-
UserBeanub=newUserBean();
-
SecurityHandlerhandler=newSecurityHandler();
-
IUseruser=(IUser)handler.getNewObjectProxy(newUserImpl());
-
user.findUserById(11);
- }
- }
-----------------------------------------------------------输出-------------------------------------------------
----------security checking---------------
-----------find User------------
分享到:
相关推荐
Jdk动态代理,基于接口的代理示例 InovactionHandler Proxy
动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须...
Spring Aop的底层实现技术 --- Jdk动态代理原理 很不错的一篇文章
AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理
代理模式及手实现动态代理(aop原理)一、代理模式1. 定义2. 示例(1)静态代理(2)动态代理3. 通用类图4. 代理模式的优点二、jdk动态代理实现原理1. jdk动态代理源码分析(通过该示例学会阅读源码的方法)2.jdk动态...
为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...
spring中动态代理机制的实现原理及AOP实现原理,JDK的反射,cglib类。
JDK动态代理: 我们将详细介绍JDK动态代理的概念和工作原理。您将了解如何使用Java的反射机制来创建代理对象,以及如何将横切逻辑注入到目标方法中。我们还提供了实际示例,演示如何在Spring AOP中使用JDK动态代理。...
通过代码了解springaop原理,代码采用jdk的动态代理相关类Proxy、InvocationHandler解释动态代理模式
如果一个类实现了一个或多个接口,那么Spring就会使用默认的JDK动态代理,如果没有实现任何接口,就会使用cglib来代理。当然我们也可以手动改变这些设置。这也是比较容易掉坑的部分,如果设置错了代理方式,那么在...
该思维导图主要讲解了代理模式的具体实现,包括...其中jdk代理主要讲解了其具体的实现方式、原理、缺点、缓存机制等。Cglib代理主要讲解了其原理、与JDK代理的对比、Enhancer源码解析、methodProxy和Fastclass源码等。
动态代理在 Java 中有着广泛的应用,比如 AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理等。 在了解动态代理前,我们需要先了解一下什么是代理模式。 代理模式 代理模式...
6. 搞清楚cglib和jdk动态代理的区别 7. 掌握cglib和jdk产生代理对象的方式 8. 掌握cglib和jdk产生代理对象的底层原理 9. 掌握cglib和jdk如何动态添加代理对象的增强功能。 课程目标 1. 可以自主完成阅读Spring框架中...
Spring框架是一个开放源代码的J2EE应用程序框架,是对bean的生命周期进行管理的轻量...Spring框架主要由七部分组成,分别是Spring Core,Spring AOP,Spring ORM,Spring DAO,Spring Context,Spring Web和Spring Web MVC。
1.jdk动态代理:使用jdk中的Proxy,Method,InvocaitonHanderl创建代理对象,jdk动态代理要求目标类必须实现接口 2.cglib动态代理:第三方的工具库,创建代理对象,原理是继承。 通过继承目标类,创建子类,子类就是...
7. 重点掌握aop底层的原理之动态代理机制的概述及差别 8. 重点掌握JDK代理技术之产生代理对象和代理对象执行逻辑分析 9. 重点掌握Cglib代理技术之产生代理对象和代理对象执行逻辑分析 10. 认识Spring AOP中底层常用...
它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。 二、CGLIB原理 CGLIB原理:动态...
该课程是最新的Spring5版本包含:STS工具、IoC、DI思想、Spring测试框架、bean的实例化、作用域、初始化、生命周期、静态代理、字节码加载原理、JDK动态代理和原理、CGLIB动态代理和原理、拦截器思想、AOP思想和开发...
jdk和cglib实现的AOP实际上会在内存生成动态代理对象,还有什么其他办法实现AOP?经提示答出AspectJ以及实现原理 Spring中的对象的作用域 Singleton对象引用Prototype会发生什么 项目中怎样使用微服务? 两个服务...
为什么jdk动态代理是必须是接口 两种动态代理的区别 AOP实现方式:aop注解或者xml配置;后来工具jar包aspects; aop的属性 事务 事务编码方式: 事务注意事项; 为什么同一个类A调用b方法事务,A方法一定要有事务...