美文网首页
【济南校区】静态代理和动态代理的使用

【济南校区】静态代理和动态代理的使用

作者: keaiai | 来源:发表于2018-05-13 22:39 被阅读0次

 【济南校区】静态代理和动态代理的使用

 1.静态代理类是由程序员创建或者特定工具自动生成的代码,然后再进行编译的.在程序运行前代理类的.class文件已经存在了.

2.

动态代理类是在程序运行时,通过反射机制动态创建的.

静态代理的实现

          01.

用户管理类

public classUserServiceImp implements UserService {

public void addUser(String username, String passsword) {

// TODO Auto-generated method stub

System.out.println("UserServiceImp.addUser");

}

public void deleUser(String userId) {

// TODO Auto-generated method stub

System.out.println("UserServiceImp.deleUser");

}

}

           02.代理类--代理用户管理实现类

public classUserServiceImplProxy implements UserService {

private UserService userService;

public UserServiceImplProxy(UserService userSservice){

this.userService = userSservice;

}

public void addUser(String username, String passsword) {

try {

//

添加打印功能

System.out.println("start-addUser");

userService.addUser(username, passsword);

} catch (Exception e) {

//

添加用户失败

System.out.println("error--addUser");

}

}

public void deleUser(String userId) {

System.out.println("UserServiceImp.deleUser");

}

}

   03.客户端的实现

public void Test1(){

UserService userService = newUserServiceImplProxy(new UserServiceImp());

userService.addUser("zhangsan","123456");

}

静态代理类只能为特定的接口(Service)服务。如想要为多个接口服务则需要建立很多个代理类

所以还是用动态代理比较方便

01.动态代理的具体实现类

public class UserServiceImp implements UserService {

public void addUser(String username, String passsword) {

// TODO Auto-generated method stub

System.out.println("UserServiceImp.addUser");

}

public void deleUser(String userId) {

// TODO Auto-generated method stub

System.out.println("UserServiceImp.deleUser");

}

}

02.动态创建代理对象的类

public class UserServiceHandleProxy implements InvocationHandler {

//

创建目标对象

private Object targetPbject;

//

绑定关系

public Object newProxyInstance(Object targetPbject){

this.targetPbject = targetPbject;

returnProxy.newProxyInstance(targetPbject.getClass().getClassLoader(),

targetPbject.getClass().getInterfaces(), this);

}

@Override

public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {

System.out.println("start-->>");

for(inti=0;i

System.out.println(args);

}

Objectret=null;

try{

/*

原对象方法调用前处理日志信息*/

System.out.println("satrt-->>");

//

调用目标方法

ret=method.invoke(targetPbject, args);

/*

原对象方法调用后处理日志信息*/

System.out.println("success-->>");

}catch(Exceptione){

e.printStackTrace();

System.out.println("error-->>");

throwe;

}

returnret;

}

}

03.客户端的具体实现

public void Test2(){

UserServiceHandleProxy handlerProxy = newUserServiceHandleProxy();

UserService userService =(UserService)handlerProxy.newProxyInstance(new UserServiceImp());

userService.addUser("zhangsan","123456");

}

}

通过动态代理我们可以做很多操作,如进行日志处理、事物管理、权限控制等事情。

[if !supportLineBreakNewLine]

[endif]

如果你想了解更多黑马课程请点击这里,如果你想加入黑马这个大家庭学习先进技术,广交天下好友!黑马程序员济南中心联系电话:0531-55696830

相关文章

  • 【济南校区】静态代理和动态代理的使用

    【济南校区】静态代理和动态代理的使用 1.静态代理类是由程序员创建或者特定工具自动生成的代码,然后再进行编译的.在...

  • Java 代理的实现原理

    一、怎样使用代理 二、代理实现的原理 一、代理分为静态代理和动态代理 静态代理:代理对象获得目标对象的引用 动态代...

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • 静态代理

    静态代理, : //创建代理 总结静态代理: 解决: 可以使用动态代理。

  • 代理模式

    静态代理:例子 动态代理: 使用:

  • 静态代理、动态代理

    代理分为静态代理和动态代理 按照代理创建的时期,可以分为静态代理和动态代理: (1) 静态代理:由程序员或者...

  • JAVA动态代理的实现方式

    1. 静态代理VS动态代理 代理类可以增强被代理对象的方法。可分为静态代理和动态代理。 1.1 静态代理 静态代理...

  • spring aop 汇总

    静态代理、动态代理和cglib代理 aop 使用 Spring AOP - 注解方式使用介绍spring aop ...

  • Java 代理

    静态代理 动态代理 动态代理, 日志切片使用反射获得方法 动态代理, 自定义注解(对注解的方法,使用动态代理添加切...

  • Spring之代理模式

    九、代理模式 目录:静态代理、动态代理AOP的底层机制就是动态代理。代理模式分为静态代理和动态代理。接触aop之前...

网友评论

      本文标题:【济南校区】静态代理和动态代理的使用

      本文链接:https://www.haomeiwen.com/subject/yaerdftx.html