Proxy与CGLib实现动态代理

0、静态代理

  • 参考链接:https://www.yusian.com/blog/?p=1978
  • 简单地说:一个对象实现了另一个对象的功能,我们就将前者称为后者的代理。然而单纯地实现原始对象的功能没有太大的意义,一般而言,代理的目的是在原始对象功能的基础上进行额外的扩展,我们称之为附加功能

  • 静态代理很好地诠释了代理的作用,但由于静态代理的缺陷,利用反射机制对其进行改造便有了动态代理。

  • 只要是代理,其核心目的都是在原始对象的基础上扩展附加功能,这一点始终不变。

  • 常用的动态代理有2种,一种JDK自带的Proxy类及对其进行封装的相关类,另一种是以CGLib为代表的第三方库

1、Proxy

[……]

继续阅读

Spring动态代理中切入点表达式的基本使用

0、前情回顾

什么是动态代理,Spring动态代理的基本实现参考:https://www.yusian.com/blog/?p=1981

动态代理中比较重要的一个环节就是AOP组装,将附加方法与原始方法进行组合,那哪些原始方法需要进行组装呢?如何匹配原始方法,这便是切入点表达式需要解决的问题;

回顾一下动态代理中Spring配置文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi=[......]

继续阅读

Spring静态代理的简单实现

基本要素

  • 原始对象:需要被代理的对象,核心功能;
  • 附加对象:用于修饰原始对象的附加功能;
  • 代理对象:融合原始对象与附加对象

相关类

UserDao

package com.yusian.dao;
import com.yusian.domain.User;
public interface UserDao {

    void register(User user);

    boolean login(String username, String password);
}

UserDaoImpl

package com.yusian.dao;

im[......]

继续阅读