1、相关依赖
<dependencies>
<!--Spring相关-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.3</version>
</dependency>
<!--数据库连[......]
<dependencies>
<!--Spring相关-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.3</version>
</dependency>
<!--数据库连[......]
简单地说:一个对象实现了另一个对象的功能,我们就将前者称为后者的代理。然而单纯地实现原始对象的功能没有太大的意义,一般而言,代理的目的是在原始对象功能的基础上进行额外的扩展,我们称之为附加功能。
静态代理很好地诠释了代理的作用,但由于静态代理的缺陷,利用反射机制对其进行改造便有了动态代理。
只要是代理,其核心目的都是在原始对象的基础上扩展附加功能,这一点始终不变。
[……]
什么是动态代理,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=[......]
UserService
package com.yusian.service;
import com.yusian.domain.User;
public interface UserService {
void register(User user);
boolean login(String username, String password);
}
UserServiceImpl
package com.yusian.service;
import com.yusian.domain.User;
publi[......]
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[......]