JDK动静代理中:抽象类不能够被代理 没有接口不能够被代理
- 在 Java 8之前,接口能够有常量变量和形象办法。咱们不能在接口中提供办法实现。如果咱们要提供形象办法和非形象办法(办法与实现)的组合,那么咱们就得应用抽象类。
- 在 Java 8 接口引入了一些新性能——默认办法和静态方法。
- Java 9 不仅像 Java 8 一样反对接口默认办法,同时还反对公有办法
- jdk1.9接口中能够有static、default、private办法、private static办法 同时他们都必须有办法体
接口的静态方法能被重写或实现吗?
不可被重写 不可被代理
静态方法是属于类的,不属于对象,类哪有重写或实现,所以在其实现类里当然不能重写或实现 在代理中也不会有此办法,userProxy外面都没有,更别说被代理了,那是不可能的
defaultMethod能够被代理吗?
能够被重写(不强制),也能够被代理
privateMethod能够被代理吗?
不可被重写 不可被代理
只能在接口本人外部调用,,都没有权限拜访它当然不能被代理了,所以动静代理中基本不会有这个公有办法
当然为了证实这一点能够 应用接口的公共办法来间接调用它,看它到底有没有被代理, 而接口中能够有办法体的只有static、default、private办法,而static又不能够(static不能够调用非static办法),别无选择,只能用default测了 发现private并没有被代理
protected 、package上面办法能够被代理吗?
这些修饰符在接口中都是不容许的,接口中都没有,哪来的代理啊
总结
综上所述只有public和default办法能够被代理,private和static都不能够
- public可重写可被代理(在实现类中重写是强制的)
- private和static不能够被重写也不能够被代理
- default可重写可代理(在实现类中不强制必须重写,不过不论重写不重写都会主动被代理)
public interface MapperInterface { static void staticMethod() { System.out.println("static bb"); } default void defaultMethod() { privateMethod(); } private static void privateMethod() { System.out.println("MapperInterface private"); } void publicMethod();}public class DynamicProxy { public static <T> T getProxy(T t) { return (T) Proxy.newProxyInstance(t.getClass().getClassLoader(), t.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //调用指标办法之前做的公共逻辑 System.out.println("建设连贯"); //调用指标办法,这句话必须要有的,就是调用被传入的对象的办法(外面写了外围代码) Object object = method.invoke(t, args); //调用指标办法之后做的公共逻辑 System.out.println("提交事务"); System.out.println("敞开连贯"); return object; } }); }}public class User implements MapperInterface { @Override public void publicMethod() { System.out.println("user public"); } // 能够被重写 不强制,不论有没有重写 都能够被代理// @Override// public void defaultMethod() {// System.out.println("user default");// }}public class Test { public static void main(String[] args) { User user = new User(); MapperInterface userProxy = DynamicProxy.getProxy(user); userProxy.defaultMethod(); }}
起源:blog.csdn.net/weixin_39143647/article/details/118485683
近期热文举荐:
1.1,000+ 道 Java面试题及答案整顿(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!