java接口默认实现和提供给外部实现的方法

介绍

很多像mybatis的插件呀 可以自己实现加载一些参数呀 那么这个要怎么做呢

比如我们要用到的bean

CiweiConfiguration

public interface CiweiConfiguration {

    String ciwei();

}

接口

public interface TestService {

    String test();

}

接口的默认实现

public class TestServiceImpl implements TestService {

    @Override
    public String test() {
        return "test1";
    }

}

装载接口

TestConfiguration

@Configuration
public class TestConfiguration {

    @Autowired
    private TestService testService;

    @Bean
    public TestService testService(){
        return new TestServiceImpl();
    }

    @Bean
    public CiweiConfiguration ciweiConfiguration(){
        return new CiweiConfiguration() {
            @Override
            public String ciwei() {
                return testService.test();
            }
        };
    }

}

测试

@RestController
public class TestController {

    @Autowired
    private CiweiConfiguration ciweiConfiguration;

    @RequestMapping(value = "test")
    public String test(){
        return ciweiConfiguration.ciwei();
    }

}

会发现测试输出使用默认的实现输出test1没什么问题

使用自定义实现覆盖默认实现

@Component
public class Test2ServiceImpl implements TestService {

    @Override
    public String test() {
        return "test2";
    }

}

会发现测试输出使用默认的实现输出test2这样可以重新实现一些逻辑呀

当然也可以使用接口的默认实现不用去implements实现接口呀

public interface TestService {

    default String test(){
        return "默认的实现";
    };

}

这个思想主要是用户可以实现一些自定义的加载参数等 不使用默认的方式 哈哈真厉害


文章作者: Ciwei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ciwei !
 上一篇
docker-compose安装es集群 docker-compose安装es集群
docker-es-cluster本仓库使用docker-compose构建elasticsearch 7.1.0集群 由于空文件夹提交会被忽略,所以data目录和logs目录下面创建了package.info,使用前需要删除各数据目录
2019-07-29
下一篇 
【自定义starter实现】Spring Boot自定义starter实现 【自定义starter实现】Spring Boot自定义starter实现
介绍“约定优于配置”是Spring Boot倡导的一个思想,而其自动配置的特性则恰好体现了这一思想。有了自动配置,不仅简化了Maven的依赖配置,更重要的是摆脱了以往使用Spring框架开发时,所必须编写的一堆繁琐的xml配置文件。而要使用
2019-07-28
  目录