public class Order {
private Object orderInfo;
private Integer userId;
public Object getOrderInfo() {
return orderInfo;
}
public void setOrderInfo(Object orderInfo) {
this.orderInfo = orderInfo;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}
public interface IOrderService {
int saveOrder(Order order);
}
public class OrderServiceImpl implements IOrderService {
private IOrderDao orderDao;
@Override
public int saveOrder(Order order) {
orderDao = new OrderDaoImpl();
// System.out.println("Service层调用Dao层添加Order");
return orderDao.insert(order);
}
}
public interface IOrderDao {
int insert(Order order);
}
public class OrderDaoImpl implements IOrderDao {
@Override
public int insert(Order order) {
System.out.println("Dao层添加Order成功");
return 1;
}
}
public class DataSourceContextHolder {
private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
public static void setDBType(String dbType){
CONTEXT_HOLDER.set(dbType);
}
public static String getDBType(){
return CONTEXT_HOLDER.get();
}
public static void clearDBType(){
CONTEXT_HOLDER.remove();
}
}
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDBType();
}
}
public class OrderServiceStaticProxy {
private IOrderService orderService;
public int saveOrder(Order order){
beforeMethod(order);
orderService = new OrderServiceImpl();
int result = orderService.saveOrder(order);
afterMethod();
return result;
}
//执行方法前
private void beforeMethod(Order order){
Integer userId = order.getUserId();
int dbRouter = userId % 2;
System.out.println("静态代理分配到["+dbRouter+"]处理数据");
//todo 设置dataSource
DataSourceContextHolder.setDBType("db" + String.valueOf(dbRouter));
System.out.println("静态代理 before code");
}
//执行方法后
private void afterMethod(){
System.out.println("静态代理 after code");
}
}
public class Test {
public static void main(String[] args) {
Order order = new Order();
order.setUserId(2);
OrderServiceStaticProxy orderServiceStaticProxy = new OrderServiceStaticProxy();
orderServiceStaticProxy.saveOrder(order);
}
}
public static void main(String[] args) {
Order order = new Order();
order.setUserId(1);
//创建代理类,并注入目标类
IOrderService orderServiceDynamicProxy =
(IOrderService) new OrderServiceDynamicProxy(new OrderServiceImpl()).bind();
orderServiceDynamicProxy.saveOrder(order);
}