静态代理实现
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.structural.proxy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DAO层——与业务无关
|
||||||
|
* 仿mybatis
|
||||||
|
*
|
||||||
|
* @author F嘉阳
|
||||||
|
* @date 2020/2/29 16:15
|
||||||
|
*/
|
||||||
|
public interface IOrderDao {
|
||||||
|
|
||||||
|
int insert(Order order);
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.structural.proxy;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author F嘉阳
|
||||||
|
* @date 2020/2/29 16:17
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class IOrderDaoImpl implements IOrderDao {
|
||||||
|
@Override
|
||||||
|
public int insert(Order order) {
|
||||||
|
log.info("DAO层添加订单记录成功");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.structural.proxy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单服务层
|
||||||
|
*
|
||||||
|
* @author F嘉阳
|
||||||
|
* @date 2020/2/29 16:14
|
||||||
|
*/
|
||||||
|
public interface IOrderService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存订单
|
||||||
|
*
|
||||||
|
* @param order
|
||||||
|
* @return 保存的行数
|
||||||
|
*/
|
||||||
|
int save(Order order);
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.structural.proxy;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author F嘉阳
|
||||||
|
* @date 2020/2/29 16:16
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class IOrderServiceImpl implements IOrderService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模拟Spring注入
|
||||||
|
*/
|
||||||
|
private IOrderDao orderDao = new IOrderDaoImpl();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存订单
|
||||||
|
*
|
||||||
|
* @param order
|
||||||
|
* @return 保存的行数
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int save(Order order) {
|
||||||
|
log.info("Service层调用DAO层添加订单记录成功");
|
||||||
|
return orderDao.insert(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.structural.proxy;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单
|
||||||
|
*
|
||||||
|
* @author F嘉阳
|
||||||
|
* @date 2020/2/29 16:12
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class Order {
|
||||||
|
|
||||||
|
private Object orderInfo;
|
||||||
|
|
||||||
|
private Integer userId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.structural.proxy.staticproxy;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import top.fjy8018.designpattern.pattern.structural.proxy.IOrderService;
|
||||||
|
import top.fjy8018.designpattern.pattern.structural.proxy.IOrderServiceImpl;
|
||||||
|
import top.fjy8018.designpattern.pattern.structural.proxy.Order;
|
||||||
|
import top.fjy8018.designpattern.pattern.structural.proxy.db.DataSourceContextHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 静态代理实现分库
|
||||||
|
*
|
||||||
|
* @author F嘉阳
|
||||||
|
* @date 2020/2/29 16:20
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class OrderServiceStaticProxy {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模拟Spring注入
|
||||||
|
*/
|
||||||
|
private IOrderService orderService = new IOrderServiceImpl();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对源方法增强
|
||||||
|
*
|
||||||
|
* @param order
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int save(Order order) {
|
||||||
|
beforeMethod();
|
||||||
|
|
||||||
|
// 通过用户ID对2取模分库
|
||||||
|
Integer userId = order.getUserId();
|
||||||
|
int dbRouter = userId % 2;
|
||||||
|
log.info("静态代理分配到【db{}】处理数据", dbRouter);
|
||||||
|
|
||||||
|
// 设置DataSource
|
||||||
|
DataSourceContextHolder.setDBType(String.valueOf(dbRouter));
|
||||||
|
|
||||||
|
afterMethod();
|
||||||
|
|
||||||
|
return orderService.save(order);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void beforeMethod() {
|
||||||
|
log.info("静态代理before code");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void afterMethod() {
|
||||||
|
log.info("静态代理after code");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.structural.proxy.staticproxy;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import top.fjy8018.designpattern.pattern.structural.proxy.Order;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author F嘉阳
|
||||||
|
* @date 2020/2/29 17:17
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
class OrderServiceStaticProxyTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void save() {
|
||||||
|
Order order1 = new Order();
|
||||||
|
order1.setUserId(1);
|
||||||
|
Order order2 = new Order();
|
||||||
|
order2.setUserId(2);
|
||||||
|
|
||||||
|
OrderServiceStaticProxy proxy = new OrderServiceStaticProxy();
|
||||||
|
proxy.save(order1);
|
||||||
|
proxy.save(order2);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user