Spring 从入门到精通 (十一) 静态代理登场
关键词:Spring | 静态代理
本专栏通过理论和实践相结合,系统学习框架核心思想及简单原理,原创不易,如果觉得文章对你有帮助,点赞收藏支持博主 ✨
一、代理引言
先说一下生活中常见的代理,小伙伴会问,我咋没听说过生活中有代理呢?哈哈,是有的但可能不叫代理,但都是一个意思,比如你听过的中介和代理是一个意思。
假如说我现在装备买房,我会去找中介对吧,其实中介在这个过程就充当了代理,他辅助房主买房,房主不想每天花太多心思在房子上,因为还有其他重要的事情等着房主呢?所以,房主把这些事交给了代理来做,即房产中介。
回到代码中,业务层是不是很重要,对,非常重要,那么我希望我的业务层明确的处理业务,不要再加入其他的代码,有小伙伴问,除了业务还有其他代码?哈哈,必须有,比如事务操作,日志记录,性能分析等等,我们统统把他们称为次要业务,像这种脏活累活我也希望在代码中也给他找一个代理。
二、名词解释
原始类,目标类
指的是核心功能类,比如业务类,做业务处理和调用DAO
原始方法,目标方法
原始类中的方法就是原始方法
额外功能,附加操作
比如,事务,日志,性能等等
三、如何开发一个代理对象
- 代理对象要和原始业务对象有同一个规定,放在面向对象中就是实现同一个接口(interface)
- 代理对象依赖业务对象
四、静态代理开发
目录结构如下:
pom.xml依赖如下
主要使用了单元测试框架 Junit
和效率插件 Lombok
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
User实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private String pwd1;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
UserService接口
public interface UserService {
void register(User user);
boolean login(String name, String pwd1);
}
- 1
- 2
- 3
- 4
UserServiceImpl实现类
public class UserServiceImpl implements UserService{
@Override
public void register(User user) {
System.out.println("UserServiceImpl register + DAO");
}
@Override
public boolean login(String name, String pwd1) {
System.out.println("UserServiceImpl login + DAO");
return true;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
UserServiceProxy 静态代理类
UserServiceProxy
静态代理类和实现原始对象的统一接口,同时依赖原始对象完成业务操作的同时,执行一些附加操作。
public class UserServiceProxy implements UserService {
private UserServiceImpl userService = new UserServiceImpl();
@Override
public void register(User user) {
System.out.println("----日志-----");
userService.register(user);
}
@Override
public boolean login(String name, String pwd1) {
System.out.println("----日志----");
return userService.login(name, pwd1);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
测试类
/**
* 静态代理测试
*/
@Test
public void t1(){
UserServiceProxy userServiceProxy = new UserServiceProxy();
User user = new User();
String name = "小张";
String pwd1 = "123412";
userServiceProxy.register(user);
userServiceProxy.login(name,pwd1);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
测试结果
----日志-----
UserServiceImpl register + DAO
----日志----
UserServiceImpl login + DAO
- 1
- 2
- 3
- 4
没有问题,
五、静态代理的缺点
注意了,为啥叫静态代理类呢?因为我们每开发一个业务层,就要同时手动开发一个代理类从而完成代理,这就是静态代理的特点,那他有什么缺点呢?
1. 有一个原始类,就要提供一个代理类,随着业务扩大,不利于项目管理
2. 额外功能的维护性差,随着业务复杂,代理类中的附加操作修改起来越来越麻烦
六、写在最后
座右铭:不要在乎别人如何看你,要在乎你自己如何看未来,看梦想,看世界…!
一起学习的可以私信博主或添加博主微信哦。
文章来源: blog.csdn.net,作者:王子周棋洛,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/m0_53321320/article/details/125900777
- 点赞
- 收藏
- 关注作者
评论(0)