码迷,mamicode.com
首页 > 编程语言 > 详细

Spring5 接口 ImportBeanDefinitionRegistrar 中 default 方法

时间:2020-02-06 23:29:37      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:res   方法体   hide   meta   extend   data   spring   xtend   uil   

环境:

java version "13.0.1" 2019-10-15

Java(TM) SE Runtime Environment (build 13.0.1+9)

 

今天在学习 Spring5 注解,想通过自定义的方式想 IOC 容器中加载类,其中一种方法为 用类实现 ImportBeanDefinitionRegistrar 接口,但是实现该接口后并未提示实现接口方法。

ImportBeanDefinitionRegistrar中定义了两个方法:

 

default void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator)

 

default void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)

方法用 default 修饰,因此简单学习了下 default 修饰

1.在java8以后,接口中可以添加使用default修饰的方法,default修饰方法只能在接口中使用,在接口中被default标记的方法为普通方法,可以直接写方法体。

  因此实现类可以直接使用接口中的方法。

技术图片
public interface A {
    public default void a(){
        System.out.println("This is Interface A.a()");
    }
}

public class B implements A{
 
}

public class Test {
    public static void main(String[] args) {
        B b = new B();
        b.a();
    }
}
default 接口

2.如果一个类同时实现接口A和B,接口A和B中有相同的default方法,这时,该类必须重写接口中的default方法。因为,此时实现类不知道应该继承哪一个接口中的default方法。

技术图片
public interface A {
    public default void a(){
        System.out.println("This is Interface A.a()");
    }
}

public interface C {
    public default  void a(){
        System.out.println("This is Interface C.a()");
    }
}

public class B implements A,C {
    
}
default 继承两个接口

如以上代码,Idea会提示 :inherits unrelated defaults for a() from types A and C

所以说需要修改为:

技术图片
public class B implements A,C {
    @Override
    public void a() {
        System.out.println("This is Interface C.a()");
    }
}
default 添加方法实现

当类实例化时,会调用实现类当方法。

3.如果再有类分别继承实现类 和 实现接口,会调用实现类方法

技术图片
public class D extends B implements A{
}

public class Test {
    public static void main(String[] args) {
        D d = new D();
        d.a();
    }
}
default

This is Class B.a()

Spring5 接口 ImportBeanDefinitionRegistrar 中 default 方法

标签:res   方法体   hide   meta   extend   data   spring   xtend   uil   

原文地址:https://www.cnblogs.com/KennyWang0314/p/12271156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!