混淆点义

文章链接:http://www.liuschen.com

1.NOT FOUND

java.lang.NoClassDefFoundError是运行阶段无法加载到类

java.lang.ClassNotfoundException是编译阶段无法找到类

2.代理模式和装饰模式

代码类似,都是两个类实现同一个接口,一个类实际功能操作,传给另一个作为代理或是装饰的类;

功能不同,装饰旨在增加功能(不妨碍直接访问功能类的方法),代理则重在控制访问(会在访问功能类的方法中添加访问规则)

3.JDK动态代理:

  • 定义代理对象接口以及代理对象实现

    如:UserService userService = new UserServiceImpl();

  • 实现InvocationHandler接口,将代理对象传入(其中Invoke方法可以实现代理功能//通过反射)

    如:MyInvocationHandler invocationHandler = new MyInvocationHandler(userService);

  • 根据目标对象生成代理对象(classLoader只要选对就行,加载普通类用的同一种classLoader)

    如:UserService proxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(),
    userService.getClass().getInterfaces(), invocationHandler);

  • 根据需要调用代理对象的方法

    如:proxy.getXXX()

CGLib代理(针对目标类没有实现目标接口的代理):

动态生成子类,需要外部包,适合不频繁创建类的代理

Loading Disqus comments...
Table of Contents