减少项目之间的依赖关系

时间:2014-02-22 15:47:05

标签: java spring hibernate

我想创建一个应该最小化项目之间依赖关系的项目。我的项目结构如下。

com.example.persistence将包含所有实体和一个BaseDao,其中包含用于保存实体的保存方法。

package com.example.pl;

public class BaseDao {

    public  void save(Object obj){
        System.out.println("Saved the object"+obj);
    }

}

com.example.dao将包含将实体保存到数据库中的方法。保存方法基本上调用了persitence层中的BaseDao.save方法。

package com.example.dao;

import com.example.pl.BaseDao;

public class EmployeeDao extends BaseDao{

    @Override
    public void save(Object obj) {
        // TODO Auto-generated method stub
        super.save(obj);
    }

}

com.example.service,它是一个将访问Dao.Save()方法的服务层。

现在我在服务层本身编写了一个main方法来测试依赖项。当我运行main方法时,它会给出一个下面的编译错误

package com.example.sl;

import com.example.dao.EmployeeDao;

public class EmployeeService {

    public static void main(String[] args) {
        EmployeeDao dao =new EmployeeDao();
        dao.save(null);
    }

}



The type com.example.pl.BaseDao cannot be resolved. It is indirectly referenced from required .class files

我知道我在服务层的持久层中缺少jar。那么,如果没有在服务层中添加持久层的依赖性,有什么办法吗?

3 个答案:

答案 0 :(得分:0)

如果不知道如何组织项目,很难回答。所以,我会冒昧地假设你正在使用Maven。我假设您定义了三个项目/模块(persitence,dao,service),这将导致persistence.jar,dao.jar和service.jar。

因此,服务模块将依赖于dao模块,而dao模块将依赖于持久性模块。 maven like工具的美妙之处在于它将传递依赖性。因此,pom.xml(maven artifact - 定义项目定义)只会声明对dao的依赖。

然而,只是直接回答你的问题,你从类路径中缺少持久性的lib jar。再一次,很难回答不知道你的项目结构。

答案 1 :(得分:0)

以某种形式或方式,您必须添加持久性依赖项。如果您正在使用maven多模块项目,如果您尝试在子项目中运行maven命令,有时会发生此错误,因为它将无法从其他模块中找到jar。如果它是一个普通的maven项目而你的dao.jar依赖于persistence.jar,它应该通过传递依赖将你的persistence.jar拉入你的项目中。 (净结果,即使你没有特别引用它,你也会以某种方式得到它。)

如果您不使用maven或其他依赖项管理工具,则需要将persistence.jar放入类路径/项目中。依赖关系管理工具正在为您做这件事,如果您已正确设置依赖关系并且没有尝试让服务排除来自DAO层的传递依赖关系的持久性。您的DAO中有对象,这些对象是在persistence.jar中的对象之上编译的。它必须能够访问那些来编译项目的人。

答案 2 :(得分:0)

从它听起来的样子,你建立的方式......

  • dao取决于persistence
  • service取决于dao

应该才能正常工作。您不是直接依赖persistence图层中的service,而是使用的组件。除非我们任何一个人可能忽略了任何内容,否则您的依赖关系链不会直接依赖persistence

根据你的做法(Maven,Gradle,Ivy等),将它们分成各自独立的模块可能是有益的;这样,层次结构清晰,引入意外依赖的可能性非常小。

使用该层次结构,您可以确保daopersistence有一种拒绝,service依赖于dao