静态代理实现
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