使用spring的项目能摒弃接口一级吗?

虎三儿 2017-04-17 05:42:53
我们用spring开发的时候,很多时候写一个接口,然后再去实现这个接口,实际注入的和使用的都是接口。单纯从使用的层面来看,我们直接摒弃接口通过实现类的注入也没有什么问题,那么唯一的区别就是在IOC的时候spring的代理通过接口,无接口使用cglib,难道说cglib的代理效果比spring差吗?如果二者的效率相当,那我们是不是可以摒弃接口,直接使用实现类了?大部分时间我们使用接口其实都不存在所谓的扩展的,通常都是一个接口对应一个实现类,这样的话,貌似接口扩展性压根就不存在,相反如果有一个扩展,我们还要改动接口和实现,那么,spring总用接口不存在扩展的时候,好处是什么?摒弃之后有什么弊端?
...全文
2585 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40852944 2018-06-22
  • 打赏
  • 举报
回复
这里规范的因素要多一些,就像你说的,不写接口,也同样可以注入;
Coder_D 2018-06-22
  • 打赏
  • 举报
回复
举个例子吧,现在有个业务,你有一个A接口,当前的业务实现类是A1,你的系统有100个地方引用了A接口,并交给spring去注入实现类A1,某一天,老板和你说业务实现多了一个A2,A1也需要保留以便不时之需,那只要告诉spring,A接口实例化的时候使用A2实现即可。。。试想一下,如果直接用类,可能存在的一种情况是需要改动这100个地方的引用,从A1变成A2,当然,直接把A1的全路径给A2,然后把A1更名的这种不再我的讨论范畴内,因为需要考虑到jar作为spring bean的情况,所以不讨论能够修改原有的东西这种情况。。。
QWERT4745 2018-04-19
  • 打赏
  • 举报
回复
以前刚开始接触spring的时候也想过这个问题 https://blog.csdn.net/luman1991/article/details/54844969
weixin_41368339 2018-04-19
  • 打赏
  • 举报
回复
面向接口编程是spring思想精华所在呀。 个人感觉这个接口不是必须的,但是,它让我们思考编程的时候不是从先下手开始,而是从思考程序应该完成什么任务开始。也就是先编写好接口,程序干什么,至于实现那是思考完整个程序干什么后的事。
天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为模拟天猫商城系统的核心组成部分之一,采用SSM框架的天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。本课程是一门专业的Java微服架构开发实战课程,主要讲解了当下流行的SpringBoot框架、SpringCloud架构以及与第三方技术整合开发实战内容。通过本课程的学习,能够理解并掌握SpringBoot的基础知识,同时能够掌握SpringBoot与常用的第三方技术整合实现实际开发中的业务需求,包括实现Web开发、数据访问、缓存管理、安全管理、消息服务、任务管理等;了解并掌握SpringCloud微服务架构的基础知识及相关组件的应用,掌握微服务架构在企业级开发的实践,建立起微服架构思想。项目技术栈:采用SpringBoot简化商城系统的初始搭建以及开发过程采用SpringMVC+Spring+IBatis完成项目的整合采用Mysql作为数据库存储,Druid配置数据库连接池采用SpringCloud+Netflix 微服务技术栈的实战开发使用Redis完成缓存的数据存储,搭建Redis搭建主从、哨兵、集群应用,保证Redis的高可用使用ElasticSearch全文检索系统进行商品数据搜索,使用ElasticSearch搭建搜索服务的高可用使用Ngnix实现页面动静分离与负载均衡的配置采用FastDFS文件储存系统文件存储,完成广告图片、商品图片的上传和存储系统使用采用CAS+shiro单点登录系统实现用户认证使用ECharts根据后台查询数据生成图表使用POI实现了商城盈利状况的Excel表格导出。商品的详情页使用Thymeleaf完成页面静态化,减少页面数据展示延迟项目使用SpringBoot下的Aop + 自定义注解完成用户行为记录,日志采集后台管理系统使用Shiro实现登录验证和权限管理(超级管理员、管理员、产品编辑员)项目整合微信完成订单的支付使用Redission完成分布式锁,生成订单的编号使用SpringCloud Alibaba Seat完成下订单模块的分布式事务(新增订单表,库存减少,库存超卖设计)使用RabbitMQ 做消息队列,完成订单未支付自动取消和模块直接的解耦合使用Quartz任务调度,完成缓存的定时刷新,保证缓存的一致性使用本地消息表机制完成消息然队列RabbitMQ消息可靠性传输订单支付模块使用微信扫码支付,并设置订单超时自动取消通过Jquery实现前端校验,通过基于Hibernate的Valida注解实现后端的校验功能使用Base64编码对Json数据传输进行编码和解码项目使用RESTful设计风格实现资源的访问,实现前后端分离项目使用聚合数据第三方短信平台完成用户的登陆功能项目使用SpringBoot整合JavaMail完成邮件的发送项目使用SpringBoot整合Swagger2生成接口文档使用PostMan完成接口的测试项目的测试:SpringTest、dbunit、EasyMock使用Docker 进行应用的自动化打包和发布、自动化测试和持续集成、部署和调整其他应用使用 PowerDesigner,完成数据库的建模项目使用禅道进行BUG管理环境采用Maven实施多模块项目构建,采用Git进行项目版本管理 架构解读:  项目部分截图:              讲义部分截图:          

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧