------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

JDK动态代理:

  为何叫JDK动态代理呢?

    所谓JDK,jdk是java开发工具包,它里面包含了一个动态代理的api

    代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。

    何为动态?相比于静态代理,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定一组接口及目标类对象就能动态的获得代理对象。

  下面我拿例子带入,具体的动态代理案例如下:

    首先按平时的方式来写,一个接口,一个实现它的类

      ISomeService接口

package cn.dawn.day09jdkdtproxy;

/**
* Created by Dawn on 2018/3/8.
*/
public interface ISomeService {
public void doSome();
}

      SomeServiceImpl类,实现ISomeService接口

package cn.dawn.day09jdkdtproxy;

/**
* Created by Dawn on 2018/3/8.
*/
public class SomeServiceImpl implements ISomeService {
public void doSome() {
System.out.println("do something");
}
}

      测试类,用动态代理的形式,对方法进行增强操作

package cn.dawn.day09jdkdtproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; /**
* Created by Dawn on 2018/3/8.
*/
public class Test {
public static void main(String[] args) {
/*匿名内部类要想得到外面的值,需要把外面的值改为常量*/
final ISomeService service=new SomeServiceImpl();
/*用动态代理的方式生成ISomeService的对象,就是增强后的对象,可以看看newProxyInstance的方法参数,就有方法去写了*/
/*InvocationHandler是由代理实例的调用处理程序实现的接口。*/
ISomeService proxy=(ISomeService)Proxy.newProxyInstance(service.getClass().getClassLoader(), service.getClass().getInterfaces(), new InvocationHandler() {
/**
*invoke:每个代理实例都有一个关联的调用处理程序。当在代理实例上调用方法时,方法调用将被编码并分派给invoke 其调用处理程序的方法。
* @param proxy 代理对象,没啥用
* @param method 反射获取的方法
* @param args 方法的参数
* @return
* @throws Throwable
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before===================");
method.invoke(service,args);//相当于执行目标类型的方法
return null;
}
});
proxy.doSome();
}
}

      值得一提的是:Proxy是java.lang.reflect包下,正因如此,才叫JDK动态代理

SSM-Spring-09:Spring中jdk动态代理的更多相关文章

  1. 深度剖析java中JDK动态代理机制

    https://www.jb51.net/article/110342.htm 本篇文章主要介绍了深度剖析java中JDK动态代理机制 ,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定 ...

  2. 浅谈Spring中JDK动态代理与CGLIB动态代理

    前言Spring是Java程序员基本不可能绕开的一个框架,它的核心思想是IOC(控制反转)和AOP(面向切面编程).在Spring中这两个核心思想都是基于设计模式实现的,IOC思想的实现基于工厂模式, ...

  3. Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题

    Spring AOP底层的动态代理实现有两种方式:一种是JDK动态代理,另一种是CGLib动态代理. JDK动态代理 JDK 1.3版本以后提供了动态代理,允许开发者在运行期创建接口的代理实例,而且只 ...

  4. Spring AOP高级——源码实现(3)AopProxy代理对象之JDK动态代理的创建过程

    spring-aop-4.3.7.RELEASE  在<Spring AOP高级——源码实现(1)动态代理技术>中介绍了两种动态代理技术,当然在Spring AOP中代理对象的生成也是运用 ...

  5. Spring动态代理的生成-如何判断是使用JDK动态代理还是CGlib代理

    前言 在上一篇文章中讲到了Spring是如何获取对应的Bean的增强,然后本次主要讲解一下Spring如何在获取到增强后创建Spring代理的. 在步入正题之前先给大家看一下Spring创建代理的大致 ...

  6. spring 如何决定使用jdk动态代理和cglib(转)

    Spring1.2: 将事务代理工厂[TransactionProxyFactoryBean] 或 自动代理拦截器[BeanNameAutoProxyCreator] 的 proxyTargetCla ...

  7. Cglib 与 JDK动态代理

    作者:xiaolyuh 时间:2019/09/20 09:58 AOP 代理的两种实现: jdk是代理接口,私有方法必然不会存在在接口里,所以就不会被拦截到: cglib是子类,private的方法照 ...

  8. Spring中的JDK动态代理

    Spring中的JDK动态代理 在JDK1.3以后提供了动态代理的技术,允许开发者在运行期创建接口的代理实例.在Sun刚推出动态代理时,还很难想象它有多大的实际用途,现在动态代理是实现AOP的绝好底层 ...

  9. Spring AOP详解 、 JDK动态代理、CGLib动态代理

    AOP是Aspect Oriented Programing的简称,面向切面编程.AOP适合于那些具有横切逻辑的应用:如性能监测,访问控制,事务管理以及日志记录.AOP将这些分散在各个业务逻辑中的代码 ...

随机推荐

  1. Leetcode_202_Happy Number

    + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 思路: (1)题意为判断给定的整数是否为一个"快乐的数",所谓快乐的数需 ...

  2. overridePendingTransition的简介

     1 Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画. 它包括两个部分:一部分是第一个activity退出时的动画:另外一部分时第二个activity ...

  3. #pragma comment(转)

    此文转自微软MSDN.注意这是在Windows上才有的,Linux上可没有. #pragma comment( comment-type [,"commentstring"] ) ...

  4. CentOS 7下编译安装Boost_1_57_0

    之前对库的理解太肤浅(现在也仍很肤浅),导致走了挺多的弯路,现记录以备后查. 现在可以从Boost官网下载到最新的Boost源代码boost_1_57_0.tar.gz. 现将步骤记录如下: 1. 解 ...

  5. linux文件查找及操作

    在linux下查找文件的办法最常用的就是find指令,让我们来看一下find指令如何来使用吧: find find . -name  txt             //在当前目录查找名字为txt的文 ...

  6. Oracle 内连接和外连接

    内连接用于返回满足连接条件的记录:而外连接则是内连接的扩展,它不仅会返回满足连接条件的所有记录,而且还会返回满足不满足连接条件的记录!从Oracle9i开始,可以在From 子句中指定连接语法.语法如 ...

  7. python lock, semaphore, event实现线程同步

    lock 机制不管你是java, C#, 还是python都是常用的线程同步机制, 相比较C# 的锁机制, python的加锁显得比较简单, 直接调用threading 标准库的lock 就可以了. ...

  8. 简单的Java逻辑小代码(打擂台,冒泡排序,水仙花数,回文数,递归)

    1.打擂台 简单的小代码,打擂台.纪念下过去,祝福下新人. public static void main(String[] args){ int[] ld = {1,4,2,10,8,9,5}; i ...

  9. Angular使用总结 --- 模版驱动表单

    表单的重要性就不多说了,Angular支持表单的双向数据绑定,校验,状态管理等,总结下. 获取用户输入 <div class="container-fluid login-page&q ...

  10. memocache 分布式搭建

    memcached+magent实现memcached集群   首先说明下memcached存在如下问题 本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用 ...