简化spring(5)--减少不必要的基于接口编程

编程

    众所周知,Spring是提倡基于接口编程的。    但也有些Service类,比如SaleOrderManager 和SaleOrderManagerImpl,只有5%的机会再有另一个Impl实现。95%时间里这两兄弟站一起,就像C++里的.h和.cpp,徒增维护的繁琐,所以刚开始用Spring的时候就想去掉它,今天偶然在群里聊起动态代理,算是搞明白了其中的道理,谢谢Sparkle :)      IOC是不会强制基于接口的,是这些Service类一般要使用Spring的声明式事务机制,而声明式的事务机制是使用Spring AOP来实现的。    再看Spring AOP,混合使用了Java的动态代理和CGLib2,因为:    Java的动态代理是AOP的理想方式,但只能用于接口。如果基于Class的时候,Spring AOP就会用CGLib生成目标类的子类来实现AOP,相当现实。    所以,我们只要指定使用声明式事务bean使用CGLib来实现AOP,就可以不基于接口编程了。    指定的方式是设置proxyTargetClass为true。eg.

     <bean id="baseService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"        abstract="true">        <property name="transactionManager">            <ref bean="transactionManager"/>        </property>        <property name="proxyTargetClass">                    <value>true</value>        </property>      ....      </bean>

     又讨论了一下这样的效率问题, 因为这些Service Bean都是单例,效率应该不受影响。

相关文章:1.简化Spring--配置文件2.简化Spring--View层3.简化Spring--Model层4.简化Spring Controller至所有MVC方案中最简5.简化spring--减少不必要的基于接口编程

时间: 2024-09-19 09:03:55

简化spring(5)--减少不必要的基于接口编程的相关文章

【spring框架】什么是面向抽象(接口)编程

面向抽象(接口)编程的好处就是灵活性 例子: 对于一个User的JavaBean,对他进行保存. 其中有这几个包 cn.edu.hpu.model:存放实体类 cn.edu.hpu.Service:存放业务类 cn.edu.hpu.Dao:存放数据库连接类 如果要实现可以结合多个数据库的功能该怎么写比较灵活?用面向抽象的思想: UserService: package cn.edu.hpu.service; import cn.edu.hpu.dao.UserDao; import cn.edu

简化Spring(2) Model层

因为Spring自带的sample离我们的实际项目很远,所以官方一点的model层模式展现就靠Appfuse了. 但Appfuse的model层总共有一个DAO接口.一个DAOImpl类.一个Service接口.一个ServiceImpl类.一个DataObject.....大概只有受惯了虐待的人才会欣然接受吧. 另外,Domain-Driven逢初一.十五也会被拿出来讨论一遍. 其实无论什么模式,都不过是一种人为的划分.抽象和封装.只要在团队里理解一致,自我感觉优雅就行了. 我的建议是,一开始

DotNET企业架构应用实践-基于接口开发介绍以及应用场景和案例

基于接口开发介绍          基于接口编程的本质是分离对象的实现与使用者之间的关系,即变更以下对象结构的依赖变化:                这样说的好处是客户对象依赖于服务接口,即在开发过程中我们只关注于服务接口的定义,而不关注于服务对象的具体实现,客户对象只有在运行期才通过解耦与后期绑定辅助工具(类)与具体的服务实现对象动态的建议依赖.          这样做的好处是很显然的,从技术上讲,如果把服务接口与服务实现分别放在不同的组件之中,那么修改了服务实现组件,我们不用重新编译客户

Hibernate和spring整合后为什么要用DAO接口

问题描述 比如:DAO层接口设计:InterfaceStudentDAO{publicStudentfindStudent(longid);}publicclassStudentDAOImplextendsHibernateDaoSupportimplementsStudentDAO{publicStudentfindStudent(longid){实现.....}}一个接口只对应一个实现类,这里为什么要用接口啊,不解,请高人指点迷津 解决方案 解决方案二:没有一定要求这样写,这样写的目的是为了

基于并行编程计算模型的索贝尔滤波技术

基于并行编程计算模型的索贝尔滤波技术 徐昌荣 王聪颖 袁秀华 随着遥感影像数据量的骤增,单机环境下完成索贝尔边缘滤波运算所需的计算时间也剧增.根据遥感数据的分幅特征,结合MapReduce并行分布式计算模型,本文提出了一种将该运算迁徙到Hadoop集群环境中的方法,以完成海量影像数据的索贝尔滤波运算.实验结果表明集群运算能够显著缩短计算时间,并且该计算时间会随着集群节点数目的增加而趋于减少. 基于并行编程计算模型的索贝尔滤波技术

基于并行编程计算型的索贝尔滤波技术

基于并行编程计算型的索贝尔滤波技术 徐昌荣 王聪颖 袁秀华 随着遥感影像数据量的骤增,单机环境下完成索贝尔边缘滤波运算所需的计算时间也剧增.根据遥感数据的分幅特征,结合MapReduce并行分布式计算模型,本文提出了一种将该运算迁徙到Hadoop集群环境中的方法,以完成海量影像数据的索贝尔滤波运算.实验结果表明集群运算能够显著缩短计算时间,并且该计算时间会随着集群节点数目的增加而趋于减少. 基于并行编程计算型的索贝尔滤波技术

was集群下基于接口分布式架构和开发经验谈

   某b项目是我首次采用was环境下架构和开发的手机wap应用,尽管做到了该项目的主程,但对此项目的全面构件依然有不清楚的地方,因此在这里我只能简单的谈谈开发中遇到的问题怎么处理和应对办法.          记得第一天接触这个项目时,只记得些案例代码(不知道那些是对的,那些是错的)似曾相识,但不懂如何动手写下第一个helloword,因其中的基于接口开发的ejb的架构以前根本就没接触过.好了,没办法,于是只有硬着头皮去尝试第一个基于接口开发的ejb的第一个查询方法(呵呵最简单了吧).因为一切

cocos2d-x-新手问一个关于cocos2DX基于PC编程的问题

问题描述 新手问一个关于cocos2DX基于PC编程的问题 由于一些需求,我需要把已经读取的精灵(Sprite)存储到硬盘里面,求大神给说说要用到那些函数 解决方案 存储到硬盘.是想保存精灵的各种属性么??可以用XML或者数据库

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层

系列回顾          在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出独立数据层,数据层构成以ORM技术为基础.UDA技术做为辅助,共同完成这一系列功能.   基于接口开发         关于基于接口驱动的开发请参考DoNET企业架构应用-基于接口开发介绍以及应用场景和案例一文,在此不做具体介绍. 接口驱动的数据层         基于DoNET企