`
sunbin
  • 浏览: 354240 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

动态代理--(未完)

 
阅读更多

 

public interface IUserService {
 public void addUser(String name, String password);
 public void deleteUser(int id);
}

public class UserService implements IUserService {
 public void addUser(String name, String password) {
  System.out.println("--------adduser--------");
 }
 public void deleteUser(int id) {
  System.out.println("--------deleteUser--------");
 }
}
具体实现
public class AuthHandler implements InvocationHandler {
 IUserService userService;
 public AuthHandler(IUserService userService) {
  super();
  this.userService = userService;
 }
 public Object invoke(Object obj, Method method, Object[] args)
   throws Throwable {
  //do other thing
  method.invoke(userService, args);
  //do other thing
  return null;
 }
}
如果改成通用代理,只要将具体类改为object类即可

客户端调用

import java.lang.reflect.Proxy;
public class TestClient {
 public static void main(String[] args) {
  IUserService userService=new UserService();
  AuthHandler authHandler=new AuthHandler(userService);
  IUserService userServiceproxy=(IUserService)Proxy.newProxyInstance(userService.getClass().getClassLoader(), userService.getClass().getInterfaces(), authHandler);
  userServiceproxy.addUser("name", "password");
 }
}

 

 

 

 

 

 

 

 

 

 

动态代理和静态代理一样首先也要满足三个条件

1、一个含有抽象方法的接口或者抽象类

public interface IPermissionService {
 public void getPermissions(String name);
}

2、实现抽象方法的实际类

public class PermissionService implements IPermissionService {
 public void getPermissions(String name) {
  System.out.println("getPermissions");
 }
}

 

3、动态代理类


public class DynamicHandler implements InvocationHandler {
 public Object obj = null;

 public DynamicHandler(Object obj) {

  this.obj = obj;
 }

 public Object createObject() {

  Object o = Proxy.newProxyInstance(obj.getClass()
    .getClassLoader(),
    obj.getClass().getInterfaces(), this);

  return  o;
 }

 public Object invoke(Object proxy, Method method, Object[] args) {// throws
  // Throwable
  ThreadContext.setConnection();

  Object o = null;
  try {
   o = method.invoke(obj, args);
  } catch (IllegalArgumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   Throwable t = e.getTargetException();
   e.printStackTrace();
   Connection conn = ThreadContext.getConnection();
   DB.rollback(conn);
   throw (AppRuntimeException) t;

  } finally {
   Connection conn = ThreadContext.getConnection();
   DB.commit(conn);
   ThreadContext.close(conn);
  }
  return o;
 }

}


调用实现

 

import java.lang.reflect.Proxy;

public class Test {

 public static void main(String[] args) {
  IPermissionService permissionService = new PermissionService();
  DynamicHandler handler = new DynamicHandler(permissionService);
IPermissionService pm = (IPermissionService)Proxy.newProxyInstance(permissionService.getClass().getClassLoader(),permissionService.getClass().getInterfaces(), handler);
  pm.getPermissions("");
 }

}

分享到:
评论

相关推荐

    XX产品销售省级独家代理授权协议.pdf

    6. **信息提供**:代理方每月须向制造商汇报市场动态,传递用户反馈。 7. **保密义务**:代理方必须保守制造商的商业机密,协议终止后也不能泄露或滥用。 8. **不竞争条款**:代理方不得从事与制造商竞争的业务,...

    XX产品销售省级独家代理授权协议.doc

    14. **未完之商务**:即使协议结束,若代理方在协议期间已开始的业务在结束后继续执行,仍可按约定获取佣金。 15. **货币与支付**:佣金以成交货币计算和支付,所有费用结算应遵守第18条的规定。 该协议详细规定了...

    Pass4side HP HP0-S14

    - **未完待续**:该题目信息不完整,但从上下文可以推测,安装WMIMapper是为了更好地管理和监控基于Linux的设备。 以上内容总结了HP HP0-S14考试中涉及的关键知识点和技术细节,希望对准备参加此考试的技术人员有所...

    openresty-1.13.6.1-win32

    而OpenResty将Nginx与Lua结合,通过LuaJIT(Just-In-Time编译器)进一步提升了脚本处理性能,使得动态内容生成和业务逻辑处理更为高效。 在"openresty-1.13.6.1-win32"中,我们可以找到"ngx_openresty-1.9.7.1-win...

    英语考研科技文化-类词汇.doc

    65. **Commission/Brokerage** - 佣金,经纪人或代理收取的服务费。 66. **Commodity Economy** - 商品经济,以商品生产和交换为主的经济体系。 67. **Confessional/Favorable Terms** - 优惠条件,提供更有利的...

    海运术语缩略语.doc

    26. DDU - 未完税交货,是一种货物交付形式,货物到达目的港后未完成税务。 27. DEQ - 目的港码头交货,是一种货物交付形式,货物到达目的港码头后交付。 28. DES - 目的港船上交货,是一种货物交付形式,货物到达...

    凤凰御景园别墅营销推广方案.ppt

    - 营销现况:销售表现疲软,仅售出少量别墅,缺乏系统性的营销策略,如代理公司和自销的转换,以及主动销售的不足,都是导致销售不佳的原因。 - 项目质素:别墅风格多样,但可能造成整体风格不统一,施工细节处理...

    大米外贸商城系统开源版mishop集成微信支付宝paypal以及国外主流支付方式自带文章

    4、后台一键开启自动翻译模式,支持全球133中语言,由于google代理翻译需要收费,这个功能需要付费。 5、可选购物车与ajax修改购物车产品 6、一键结算checkout 7、增加网站前台自定义路由 方便seo 后续持续推出...

    2018国际商务单证员考试押密试卷及答案(五).docx

    - **代理合同人**:与承运人签订代理合同的人。 #### 二十五、原产地证出具机构 同第十二点所述。 #### 二十六、报关程序 - **进出口申报**:提交报关单等相关文件。 - **缴纳税费**:根据货物价值缴纳相应税费...

    awesome-javascript-code-implementation:非常好的Javascript源码实现

    :keyboard: 未完待续... :writing_hand: 我为什么要这样做? 学习打字稿,玩笑等 了解有关javascript代码实现的知识。 :laptop: 计划 :hammer: 快速开始 生成code模板 npm run template 生成docs模板 npm run ...

    建设工程施工招标招投标申请人须知.doc

    - 申请书每页需法定代表人或委托代理人签字,附法定代表人授权书(非法定代表人签字时)。 - 未按要求递交的申请或资料可能会导致资格预审失败。 这个须知对投标申请人来说至关重要,它不仅规定了参与招投标的...

    业户入伙管理程序(三).docx

    - 维修部:检查即将入伙的单元,完成未完工程,并处理可能存在的建设遗留问题。 - 清洁部:确保入伙楼层和单元的清洁卫生状况良好。 5. **业主入伙手续的办理**: - 审核业主入伙条件,留存相关资料,包括入伙...

    技术培训--专业术语.doc

    28. **DDU未完税交货**:与DDP类似,但买方需负责目的地的关税和其他费用。 29. **DEQ目的港码头交货**:货物抵达目的港后,包括卸货在内的所有费用和责任转移给买方。 30. **DES目的港船上交货**:货物在目的港口...

    2021电器销售述职报告优秀例文.pdf

    9. **品牌架构调整**:报告中提到的未完事项涉及品牌架构的调整,可能是指公司需要根据市场变化和竞争态势,重新规划产品线和市场策略。 这些知识点揭示了2021年中国电器销售行业的竞争态势、市场动态以及企业应对...

    精品资料(2021-2022年收藏)西藏公路造价师《案例分析》:公路路基土石方调配模拟试题.doc

    3. **代理责任**:第3题涉及到代理行为的法律责任,根据法律规定,代理行为的后果通常由被代理人承担。 4. **施工组织设计**:第4题提到单位工程施工组织设计的技术经济分析,主要关注质量、工期和成本三个关键因素...

    专题资料(2021-2022年)01投标人资格预审文件.doc

    资格预审评审标准关乎投标申请人的财务能力、合同工程营业额/收入、净资产以及在建工程的未完部分。为了证明资金实力,投标申请人需要提交银行保函。只有在满足全部必要合格条件标准及一定比例的附加合格条件标准时...

    aqi:基于angularjs的webapp,提供AQI查询功能

    不涉及数据库操作,直接调用pm25.in接口,避免跨域访问错误,在服务器端配置了反向代理0. 使用Angular.js处理页面,页面展示使用了Bootstrap以及ui.bootstrap0. 搜索功能基于angular的数据绑定,是对所有获得到的...

    专题资料(2021-2022年)湖北省上半年保险经纪人考试试卷.docx

    18. 未完的题目需要具体解答,但我们可以看出,这部分可能涉及保险营销或保险合同的相关内容。 这些知识点涵盖了保险业务的多个方面,对于理解保险经纪人的工作职责和保险市场的运作至关重要。

    国际贸易实务试题(卷)与答案.doc

    4. **销售代理人的角色**:销售代理人通常不取得商品所有权,而是代表卖方进行销售活动,赚取佣金或差价。 5. **国际贸易术语**:EXW(工厂交货)、DDP(完税后交货)、FOB(船上交货)和DDU(未完税交货)是国际...

    libuv-tcp:基于libuv的轻量级服务器

    基于libuv的轻量级服务器特点利用C++11风格语法封装libuv,提供简洁的服务端接口;利用libuv事件库提供的异步设计,实现Reactor事件处理模式;...例子Echo服务KV存储服务(未完待续....)仍需完善引入多Reactor

Global site tag (gtag.js) - Google Analytics