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

接口类:

@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;




  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值