我是Spring启动应用的新手。我不确定我的应用程序的正确命名和注释。
我有以下服务界面。
@Service
public interface StockService {
public String getStockContent();
public List<StockElement> parseStockContents(String stockContent);
}
我有以下服务实施
@Service
public class StockServiceImpl implements StockService{
public String getStockContent() {
// IMPL removed because it is not relevant to this question.
}
List<StockElement> parseStockContents(String stockContent) {
// IMPL removed because it is not relevant to this question.
}
}
在功能方面,它运作良好。我看到有很多mvc命名约定。就像模型,实体,存储库,repositoryImpl,dao,daoImpl,service,serviceImp,controller等一样。它们也有相应的注释。
我清楚地了解模型,实体,服务,控制器。
我对dao和存储库感到困惑。同样在我的代码中,我有服务接口和实现。我注释为@Service并且它正在工作。我对此感到困惑。两者都将注释为@Service。另外,我已经看到许多地方注释为@Component。 @Component有什么用?
您能否详细解释一些代码段?
答案 0 :(得分:0)
@DAO
不是Spring注释(和命名约定),因而混淆。它是继承自EJB的遗留命名。 @Repository
与Spring environement中的数据访问对象完全相同 -
以下是一些详细信息,显示其功能和用途完全相同的命名问题https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/dao.html
答案 1 :(得分:0)
我对dao和存储库感到困惑。
Spring存储库(设计和用法)看起来更像是一个以DDD表示的存储库的DAO。 所以你可以认为它是DAO。
同样在我的代码中,我有服务接口和实现。一世 注释为@Service并且它正在工作。我有困惑 它。两者都将注释为@Service。
接口应尽可能与后面的实现所使用的技术无关。所以用Spring注释接口并不是很理想,Spring也没有考虑它,最后它在实现中定义它就没用了。
另外,我已经看到许多地方注释为@Component。是什么 使用@Component?
表示带注释的类是“组件”。这样的课程是 被认为是使用时自动检测的候选者 基于注释的配置和类路径扫描。
其他类级注释可以被视为标识a 组件,通常是一种特殊的组件:例如,该 @Repository注释或AspectJ的@Aspect注释。
您可以将其视为最广泛/一般的构造型注释,因为您将类定义为Spring bean
您可以为类注释@Controller
,@Service
或@Repository
构造型,因为此类与其中一个匹配。
有时,他们中没有一个适合您的班级,因此您使用@Component
。
答案 2 :(得分:0)
关于在Interface或其实现类上应用@Service
注释的问题,注释实现类就足够了。 Spring doc link for Service annotation
@Component
您可能只想使用POJO和其他模型类。
对于存储库类,可以使用@Repository
或任何其他扩展的数据源特定注释用于JPA存储库或Mongo存储库等。
参考文献: