您的位置:首页 > 编程语言 > Java开发

Java设计模式之静态代理模式 (Spring Aop)

2018-04-04 16:34 567 查看
Aop 利用 代理模式实现功能增强
Aop能做什么?  日志管理, 事务管理, 权限控制
定义:
代理模式(Proxy或者Surrogate),中文翻译"代理",所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.一些情况下,一个客户不想或者不能够直接的引用第一个对象,而代理对象可以在客户端对象之间起到中介的作用
三种角色:
    抽象主题角色:(现实生活中没有的, 代码里存在)

         他声明了真是主题和代理主题的共同接口, 这样一来在任何地方可以使用真是主题的地方都可以使用代理主题

    代理主题(Proxy) 角色

     代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;
    代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以代替真实主题;

    控制对真实主题的尹建勇,负责需要的时候创建真实主题对象(和删除真实主题对象)

    


接下来写个保存订单的小例子给大家示范下:

1.接口订单service 接口方法,保存订单(抽象主题角色)
public interface OrderService {

void saveOrder(Order order);

}2. 写接口实现类(1.真实主题角色)public class OrderServiceImpl implements OrderService {
@Override
public void saveOrder(Order order) {
System.out.println("保存订单:" + order);
}
}3.写代理主题对象,实现同一个接口:
public class OrderServiceProxy implements OrderService {
  @.....这边提供注入即可
OrderService orderService ;
TxManager txManager ;

@Override
public void saveOrder(Order order) {

try {
txManager.begin();
orderService.saveOrder(order);
}catch (Exception e){
txManager.rollback(e);
}finally {
txManager.release();
}
}}4.编写附加动作的事务类
public class TxManager {

public void begin(){
System.out.println("开启事务");
}

public void commit(){
System.out.println("提交事务");
}

public void rollback(Exception e){
System.out.println("回滚事务" + e.getMessage());
}

public void release(){
System.out.println("释放资源");
}
}5. 测试public static void main(String[] args) {
Order order = new Order();
order.setDate(new Date().toString());
order.setId("T1111");
order.setOperateName("ZZ");
order.setProductName("水瓶");

OrderServiceProxy orderServiceProxy = new OrderServiceProxy();
orderServiceProxy.saveOrder(order);
}结果展示:


如果代码中加入错误!结果展示:



静态代理有缺点!!
1:  因为他只能对一个接口进行调用,若果有N个接口,必须写N个代理类
2:  必须要实例化代理类 ,才能完成代理

所以静态代理无人用!!!!!当然我说的不是废话,
动态代理就可以去除这些缺点!!!!链接如下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: