接口类(interface),实现类(class),继承(extends),实现(implements)

2023-05-16

接口类:


@Service
public interface AppCertMsgService {
    public Map<String, Object> saveCardMsg(AppCertMsg appCertMsg, String channelNo);

    public Map<String, Object> getCardMsgByCertNo(String certNo);
}  

实现类:


@Service
public class AppCertMsgServiceImpl extends BaseService implements AppCertMsgService {
    @Autowired
    AppCertMsgRepository appCertMsgRepository;
    @Autowired
    CrmService crmService;

    @Override
    public Map<String, Object> saveCardMsg(AppCertMsg appCertMsg, String channelNo) {
        logger.info("saveCardMsg:===>" + appCertMsg); //继承类BaseService 中的logger 属性
        return success();
    }

    @Override
    public Map<String, Object> getCardMsgByCertNo(String certNo) {  //所要实现的接口里的方法
        AppCertMsg appCertMsg = appCertMsgRepository.getCardMsgByCertNo(certNo);
        return success(appCertMsg);  //继承类的方法
    }
}  

继承类BaseService:


public class BaseService {
    public Log logger = LogFactory.getLog(getClass());

    @Autowired
    protected RestTemplate restTemplate;

    @Value("${common.address.gateUrl}")
    private String gateUrl;

    public BaseService() {
    } 
    protected Map<String, Object> success(String retMsg) {
    Map<String, Object> returnMap = RestUtil.success();
    ResultHead head = (ResultHead) returnMap.get("head");
    head.setRetMsg(retMsg);
    returnMap.put("head", head);
    return returnMap;
    }
}

实现:

接口类存在的意义:

1.一种规范。在一些大型项目中,接口和实现往往不是同一个人负责;而接口的调用方也有可能是其他人。所以接口完善了,而在实现类还没有完成的情况下,调用方也可以继续调用接口,只需要关心输入输出,不用在意实现过程;这样实现类的开发和调用类的开发可以并行,提高开发效率;

2. 高扩展。一个接口可以有多个实现类,实现不同的功能。在注入的时候做选择,也是一种多态的体现;

3. JAVA  只支持单继承,单可以实现多个接口;接口也就有存在意义了。

Spring注解将复杂的配置文件用简单@xxx代替,当出现一个接口多个实现类的时候,究竟是用的哪个实现类呢?

示例代码:

public interface DataDao{
}

@Service

public class ImgDataDao implements DataDao{

}

@Service

public class PayDataDao implements DataDao{

}

public class TestCase{

@Resource

private DataDao imgDataDao;

@Resource

private DataDao payDataDao;

}

1)利用@Service注解自动将类ImgDataDao和类PayDataDao注解为bean,id为imgDataDao和payDataDao,即类ImgDataDao和类PayDataDao的第一个字母小写的id。

2)@Resource按byName自动注入,@Autowired按byType自动注入;

3)@Resource可用@Autowired替换

4)当不想用默认的imgDataDao和payDataDao----id命名时,可用变为如下:

@Resource(name="imgDataDao")                             

private DataDao xx;

或者:

@Autowired

@Qualifier("imgDataDao")

private DataDao yy;




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口类(interface),实现类(class),继承(extends),实现(implements) 的相关文章

  • 十年研发经验工程师的嵌入式学习书籍大推荐

    从事嵌入式研发行业十年 xff0c 认为学习就是要不断的吸纳知识 xff0c 在研发过程中 xff0c 经常会遇到一些问题 xff0c 这种发现问题并解决问题的过程就是进步 为什么选择学习嵌入式 xff1f 嵌入式系统无疑是当前最热门最有发
  • js手机号正则表达式验证

    看到网上很多代码 都很复杂 xff0c 还包括以中文开头的86 xff0c 17951 xff0c 其实谁会填这么多 xff0c 无非是检验一下他们是否位数对不对 xff0c 开头有没有写错而已 下面我们从百度百科的手机号码历程来看 xff
  • 正则验证匹配中文姓名全部源字符串

    这个是验证匹配中文姓名的全部源串 xff0c 在网上找了很久 xff0c 大都是验证匹配含有中文 xff0c 就在网上某人提供的正则的基础上修改成了验证所填姓名的每个字符 xff0c 只有都匹配才能验证通过 该正则为 xff1a u4e00
  • 域名,网站名和URL区别

    要写一个正则表达式来验证输入域名是否有正确 xff0c 一直以为例如http www baidu com类似于这种才是网站域名 xff0c 经过百度才发现自己的认知是错误的 以下转载于百度经验 xff1a http jingyan baid
  • 23种设计模式(1)-Facade设计模式

    前记 曾经我遇见的一个需求是这样的 xff0c 接口A有个方法void methodA xff0c 类B需要实现接口A的methodA 方法 xff0c 并且在类B中需要把methodA 方法内部处理逻辑获得的结果利用C类实例的某个方法进行
  • Linux CentOS 7安装GNOME图形界面并设置默认启动方式

    为hadoop集群做准备 xff0c 没有多台电脑 xff0c 也只能委屈我这渣渣电脑了 在我的物理机上安装虚拟机 xff0c 再在虚拟机里面虚拟出两台电脑 xff0c 安装两个linux操作系统 1 xff0c 电脑太渣 xff0c 安装
  • dubbo学习资源

    简介 xff1a 项目有使用dubbo xff0c 以此需要学习一下 xff0c 搜集学习资源 一 xff0c 博客资源 1 xff0c dubbo学习 2 xff0c dubbo配置
  • 使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题

    有时我们会给页面的元素 xff08 比如div xff09 设置个固定的高度或宽度 但如果给这个div又设置了内边距或者边框的话 xff0c 那么这个div就会被撑大 也就是其实际的尺寸变成了 xff1a 设置的宽高尺寸 43 内边距 43
  • 博客搬家:https://blog.csdn.net/u012995888

    本博客文章有些乱 xff0c 多有转载 xff0c 现在主要在另一CSDN账号更新原创文章 xff0c 点击查看博客主页 另外 xff0c 本博客后续可能会重新整理栏目 xff0c 更新高质量文章 xff0c 谢谢关注 xff01
  • C++ 常用设计模式(学习笔记)

    1 工厂模式 工厂模式 xff1a 简单工厂模式 工厂方法模式 抽象工厂模式 1 简单工厂模式 xff1a 主要特点是需要在工厂类中做判断 xff0c 从而创造相应的产品 xff0c 当增加新产品时 xff0c 需要修改工厂类 typede
  • 通过更新显卡驱动和内核,解决linux启动时在starting atd: [ok]停止的问题

    说得有些复杂 xff0c 你可以不用理会这些 xff0c 直接执行我罗列的那几个命令就行了 方法一 xff1a 网上有说In some cases the new install Gforce Drivers do not supporte
  • Streamedian/html5_rtsp_player接海康视频遇到的坑

    Streamedian是一套能够让浏览器免插件播放RTSP的项目 安装了其官方的server端后有一个demo 如图 xff0c 在输入处输入红框格式的RTSP地址 xff0c 如官方的demo地址 xff1a rtsp 184 72 23
  • 文档与笔记利器 reStructuredText 和 Sphinx

    原文http qixinglu com archives note tools restructuredtext sphinx 文档与笔记利器 reStructuredText 和 Sphinx 28六 2011 作者 投稿 转载 本文采用
  • 关于递归的问题:无限递归

    当你在写递归的时候 xff0c 可能会出现运行不出结果来 xff0c 此时你应该试着看看会不会出现无限递归的问题 xff0c 如果有的话 xff0c 你可以在前面增加一个判断语句 xff0c 满足条件进入执行相关操作与递归 xff0c 但在
  • 无人机路径规划1:orbslam2+VIO

    无人机路径规划1 xff1a orbslam2 43 VIO 安装XTDRONE平台 https www yuque com xtdrone manual cn basic config ros基本操作 ros中文版教程 http wiki
  • 无人机路径规划2 vins_fusion + rtab_map学习

    导航过程中的tf Map gt odom gt base footprint gt base link odom里程计 odom tf base footprint gt base link xff1a robot state publis
  • 无人机路径规划3:ego-planner三维运动规划实现

    XTDrone实现ego planner三维运动规划 编译ego palnner span class token function cp span r XTDrone motion planning 3d ego planner catk
  • XTDRONE:ego_planner三维运动规划

    ros常用消息类型 xff1a https blog csdn net xhtchina article details 119707553 iris 0 ego transfer话题在 XTDrone motion planning 3d
  • 无人机运动规划4:ego-swarm无人机群运动规划

    配置 启动python脚本生成多机launch文件 span class token builtin class name cd span XTDrone coordination launch generator python3 gene
  • Promethues: swarm_control解读

    标签可以对节点分组 xff0c 具有 ns 属性 xff0c 可以让节点归属某个命名空间 lt group ns 61 34 iris 0 34 gt lt group ns 61 span class token string 34 ir

随机推荐