Spring boot应用程序我的服务的正确命名和注释是什么

时间:2018-03-24 14:27:51

标签: java spring spring-boot

我是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有什么用?

您能否详细解释一些代码段?

3 个答案:

答案 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?

@Component javadoc州:

  

表示带注释的类是“组件”。这样的课程是   被认为是使用时自动检测的候选者   基于注释的配置和类路径扫描。

     

其他类级注释可以被视为标识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存储库等。

参考文献: