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: 必须要实例化代理类 ,才能完成代理
所以静态代理无人用!!!!!当然我说的不是废话,
动态代理就可以去除这些缺点!!!!链接如下
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: 必须要实例化代理类 ,才能完成代理
所以静态代理无人用!!!!!当然我说的不是废话,
动态代理就可以去除这些缺点!!!!链接如下
相关文章推荐
- java 设计模式之单利模式以及代理模式(静态)
- java 设计模式 代理 静态和动态
- 代理角色java设计模式之静态代理详细介绍
- SpringAop_静态代理模式
- Java设计模式---静态代理
- 静态代理(JAVA设计模式)
- Java设计模式——静态代理设计模式
- Java 设计模式——静态代理模式和动态代理模式
- java设计模式之四:代理模式 java静态代理和动态代理
- Java设计模式-----Proxy模式(静态代理)
- 【java学习笔记s】设计模式--静态代理
- 代理设计模式之(静态代理+Java自身提供的动态代理机制)
- 转个经典的帖子:说故事学设计模式之-Java静态代理模式
- 设计模式------Java多线程之静态代理模式
- 使用自动生成java文件和自动编译的静态代理模式-马士兵设计模式教程
- Java设计模式-----Proxy模式(静态代理)
- JAVA设计模式之代理模式(静态代理和动态代理)
- java 设计模式之四-代理模式 java静态代理和动态代理
- [转]转个经典的帖子:说故事学设计模式之-Java静态代理模式
- 设计模式:用Java动态代理实现AOP