如何使用spring 3.0而无需服务?

时间:2014-04-15 06:44:40

标签: spring spring-mvc spring-annotations

我正在使用带有注释的spring 3.0,我正在创建dao接口,然后是dao实现类, 然后创建服务接口,然后创建服务实现类。

并将服务实现对象用于控制器。这个过程太冗长了。

我可以只使用dao类并直接在控制器中使用它吗?

@service
@controller
public class MyController { ... }

2 个答案:

答案 0 :(得分:2)

可以,但 真的非常 不应该。如果您有任何计划将此代码投入生产,那么您需要保持您的图层定义良好。这是因为每一层都有不同的责任。

您的DAO层负责所有数据库访问。它不关心你想要什么对象,你想用它做什么,以及何时你想要它。它只关心它是如何完成的。

您的服务图层负责您要对对象执行的操作。它包含您的所有业务逻辑,便捷方法,并且可以在单个服务中使用多个DAO。您的服务层也是处理数据库事务的地方。

您的控制器层负责向用户显示数据的方式。它只包含与如何显示服务层返回的数据有关的服务和最小逻辑。

答案 1 :(得分:2)

我认为这里有两个不同的问题:

是否真的有必要拥有所有三个层:网络层,服务层和DAO?

和:

Spring bean是否需要通过接口实现和接口以及bve(auto)连接而不是具体的类?

两者的答案都是一样的:它不是必需品,但强烈推荐用于其他任何琐碎的项目。

对于第一个问题,是的,不同层次的问题更好。但是我必须管理我的控制器有时直接访问DAO以获得某些项目中的简单只读任务。有时服务层看起来太多了,只要映射DAO方法。但是,我总是将事务性业务逻辑的服务层用于实际修改数据。

对于第二个问题:Spring可以毫无问题地实例化并注入未实现任何接口的bean。但是,如果使用与面向方面编程相关的更高级的东西,最常见的是@Transactional注释,你将开始遇到问题。在这种情况下,Spring必须为您的对象创建代理,并且创建接口代理更加简单。但是它必须操纵字节码并且它引入了限制。

也许更重要的是,无论您是否使用Spring,甚至是Java或其他语言,“编程到接口”都是一种很好的做法。一个简单的谷歌搜索将提出许多关于此的好文章,或诸如this one等问题。

再说一次,虽然短期内没有这两件事你可以生活得很好,但从长远来看,两者都会让你的生活更美好。