静态代理模式
静态代理模式
概述
静态代理模式是Spring AOP理论的基础,静态代理的核心思想:已有的业务代码最好不要改变其逻辑,而是在其外面再包一层,添加一些附属的功能
示例1
租房,中介房东和租房者之间的关系
租房接口
package com.kuang.demo01;
public interface Rent {
void rent();
}
房东
package com.kuang.demo01;
public class Host implements Rent{
@Override
public void rent() {
System.out.println("房东出租房子");
}
}
中介
package com.kuang.demo01;
// 中介
public class Proxy implements Rent{
private Rent rent;
public Proxy() {
}
public Proxy(Rent rent) {
this.rent = rent;
}
@Override
public void rent() {
seeHouse();
contrat();
fare();
System.out.println("中介出租房子");
}
public void seeHouse() {
System.out.println("中介带人看房");
}
public void contrat() {
System.out.println("签订合同");
}
public void fare() {
System.out.println("收取中介费");
}
}
租房的人
package com.kuang.demo01;
public class Client {
public static void main(String[] args) {
// // 原始方式, 找房东租房子
// Host host = new Host();
// host.rent();
// 当前个人找不到房东,中介才能找到房东
Host host = new Host();
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
示例2
给service层添加日志
接口定义
package com.kuang.demo02;
public interface IUserService {
void add();
void delete();
void update();
void query();
}
service实现
package com.kuang.demo02;
public class UserService implements IUserService{
@Override
public void add() {
System.out.println("添加元素");
}
@Override
public void delete() {
System.out.println("删除元素");
}
@Override
public void update() {
System.out.println("更新元素");
}
@Override
public void query() {
System.out.println("查询元素");
}
}
代理类实现日志功能
package com.kuang.demo02;
public class UserServiceProxy {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void add(){
log("add");
userService.add();
}
public void delete(){
log("delete");
userService.delete();
}
public void update(){
log("update");
userService.update();
}
public void query(){
log("query");
userService.query();
}
public void log(String methodName) {
System.out.println("[debug]:"+ methodName);
}
}
测试类
package com.kuang.demo02;
public class Test01 {
public static void main(String[] args) {
UserService userService = new UserService();
UserServiceProxy serviceProxy = new UserServiceProxy();
serviceProxy.setUserService(userService);
serviceProxy.delete();
}
}