Java动态代理深入理解:代理类创建异常案例

原创 深碍√TFBOYSˉ_ 2024-09-13 00:54 120阅读 0赞

在Java中,动态代理主要通过Proxy类和InvocationHandler接口来实现。以下是一个关于代理类创建异常的案例:

  1. 定义目标接口和实现类
    ```java
    // 目标接口
    public interface MyService {
    String doSomething();
    }

// 实现类,作为被代理对象
@Service
public class MyServiceImpl implements MyService {
@Override
public String doSomething() {
return “Original Method Result”;
}
}

  1. 2. **创建动态代理**:
  2. ```java
  3. // 创建InvocationHandler实现类
  4. class MyInvocationHandler implements InvocationHandler {
  5. private final MyService target;
  6. // 构造器,传入被代理对象
  7. public MyInvocationHandler(MyServiceImpl target) {
  8. this.target = target;
  9. }
  10. @Override
  11. public Object invoke(Object proxy, Method method, Object[] args) {
  12. try {
  13. // 调用目标方法,并替换参数
  14. String result = target.doSomething(args[0]] == null ? "NULL" : args[0].toString());
  15. // 返回调用结果
  16. return result;
  17. } catch (Exception e) {
  18. // 处理代理类创建异常,例如抛出自定义异常
  19. throw new RuntimeException("Failed to invoke method due to exception", e);
  20. }
  21. }
  22. }
  23. // 创建动态代理对象
  24. MyInvocationHandler handler = new MyInvocationHandler(new MyServiceImpl()));
  25. Object proxy = Proxy.newProxyInstance(Object.class.getClassLoader(), new Class[]{MyService.class}}, handler);
  26. // 使用代理对象调用目标方法
  27. String result = (String) proxy.invoke(MyService.class, "Test Param"), null);

这个案例中,如果在创建动态代理的代码中出现异常(例如,获取被代理对象时抛出的异常),那么整个代理类的创建会失败,并且不会有任何返回值。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,120人围观)

还没有评论,来说两句吧...

相关阅读