Java包导入取决于配置

时间:2013-03-20 11:50:05

标签: java web-applications configuration-files layer

我有一个设计为三层架构的Java Web应用程序。目前我有两个不同的数据库层。我的所有数据访问层代码都集中在一个包中。所需的数据层在配置文件中定义。因此,应根据配置文件导入另一个包。两个数据层都通过DBfacade对象与业务层进行通信。是否可以决定应该导入哪个软件包,还是应该重命名我的DBfacades,以便我有2个不同的名称并导入这两个软件包?

3 个答案:

答案 0 :(得分:2)

如果您在单独的包中创建具有相同名称和相同方法签名的2个类,并且您通过更改导入在这些实现之间切换,那么您使用非常糟糕的设计。非常糟糕的设计。

请注意,导入部分仅在编译之前存在。然后你在字节码中有完全限定的引用。

使用接口和实现,在使用IoC或反射的实现之间切换。或者导入两个实现并决定调用哪个实现,但是IoC为您提供了更大的灵活性(例如,无需更改代码即可添加新实现)。

答案 1 :(得分:1)

import语句本身在编译时处理,因此您无法“根据配置文件导入不同的包”。

但是,根据您的配置,您可以使用不同的库。例如,如果您有两个不同的接口Foo实现:FooOneFooTwo位于不同的jar文件中,您可以实现加载其中一个的工厂FooFactory从文件中获取配置的实现,例如:

public class FooFactory {
    public Foo createFoo() throws Exception{
        Properties props = new Properties();
        props.load("/var/config.properties");
        return Class.forName(props.getProperty("foo.class")).newInstance();
    }
}

答案 2 :(得分:0)

数据层是否依赖于环境?如果是这样,请查看使用JNDI公开数据源。这将允许环境封装低级细节。

请参阅Why use JNDI for data sources