因为这就是SpringAOP的底层!
代理模式的分类:
角色分析:
代码步骤:
package com.company.org;
public interface Rent {
public void rent();
}package com.company.org;
public class Host implements Rent {
public void rent(){
System.out.println("房东要出租房子!");
}
}package com.company.org;
public class Proxy {
private Host host;
public Proxy(){
}
public Proxy(Host host){
this.host = host;
}
public void rent(){
host.rent();
}
// 看房
public void seeHost(){
System.out.println("中介带你看房");
}
public void hetong(){
System.out.println("签租赁合同");
}
public void fare(){
System.out.println("收中介费");
}
}package com.company.org;
public class Client {
public static void main(String[] args) {
// 房东要租房子
Host host = new Host();
// 代理,中介帮房东租房子,但是呢,代理一般会有一些附属操作
Proxy proxy = new Proxy(host);
// 你不用面对房东,直接找中介租房即可
proxy.rent();
}
}代理模式的好处:
代理模式的缺点:
—————————————————————————————————————————————————
下面再通过一个例子体会一下代理的作用。
假设我们有这样一个项目:

其中每一个文件的代码如下:
UserService.java
package Demo;
public interface UserService {
public void add();
public void delete();
public void update();
public void query();
}UserServiceImpl.java
package Demo;
public class UserServiceImpl implements UserService {
public void add() {
System.out.println("增加了一个用户");
}
public void delete() {
System.out.println("删除了一个用户");
}
public void update() {
System.out.println("修改了一个用户");
}
public void query() {
System.out.println("查询了一个用户");
}
}Client.java
package Demo;
public class Client {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.add();
}
}上面的代码很简单,就不再用文字赘述了。
假设该项目现在又加了一个需求,即:在执行操作之前,先输出日志。
按照以往的方法是,在每一个操作的方法中,添加一句输出就行了。但是,改动原来的代码是企业开发的大忌!
于是,我们可以新建一个文件,来调用原来的代码,并且在新文件中把新的需求加上,这样就可以不修改以前的代码了。这个新的文件就可以称为“代理”。
新建的代理文件为 UserServiceProxy.java,代码如下
package Demo;
public class UserServiceProxy implements UserService {
private UserServiceImpl userService;
// 设置代理谁
public void setUserService(UserServiceImpl userService){
this.userService = userService;
}
public void add() {
printLog("add");
System.out.println("增加了一个用户");
}
public void delete() {
printLog("delete");
System.out.println("删除了一个用户");
}
public void update() {
printLog("update");
System.out.println("修改了一个用户");
}
public void query() {
printLog("query");
System.out.println("查询了一个用户");
}
// 打印日志
public void printLog(String msg){
System.out.println("使用了" + msg + "方法.");
}
}相应的client的代码需要改动为
package Demo;
public class Client {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
// 声明代理
UserServiceProxy proxy = new UserServiceProxy();
// 设置代理谁
proxy.setUserService(userService);
proxy.add();
}
}版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181119.html原文链接:https://javaforall.cn