将spring依赖项注入Domain对象的最佳实践?

时间:2012-01-20 07:36:38

标签: spring dns

我已经抓住了很多资源,并且已经完成了这项工作并且它有点复杂,这使我开始要求对如何正确地将Spring依赖项注入DomainObjects进行审核和其他想法。

到目前为止我的解决方案包括..

定义加载所需的依赖关系

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-instrument</artifactId>
    </dependency>       
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
    </dependency>

然后..在弹簧上下文文件中配置它:

<context:spring-configured />
<context:load-time-weaver/>

为我的域类使用@Configurable:

@Configurable
public class MyDomainClass {
    ....
}

当然,使用这些VM参数:

-XX:-UseSplitVerifier -javaagent:C:/Users/albert/.m2/repository/org/springframework/spring-instrument/3.0.6.RELEASE/spring-instrument-3.0.6.RELEASE.jar

对于这个当前的解决方案,我觉得这看起来太多了,比如需要很多依赖项,还有VM args,我不喜欢在生产服务器中部署,我必须使用特定的选项,我将来可能不支持恐惧,或者版本之间可能有不同的行为。

我正在考虑使用原型范围进行domainObjects,但我担心从数据库中获取域对象时(而不是来自applicationContext)会出现依赖关系。

请分享您的经验,谢谢!

2 个答案:

答案 0 :(得分:3)

1:当您开始动态注入域对象时,它们实际上不再是域对象,因为域应该反映您的信息模型,而与任何业务规则和功能逻辑无关。

2:记住KISS(保持简单......)。在某些时候,其他人可能不得不取得所有权并维护您的代码,因此对该人有一些怜悯:)

我认为这是一种反模式,在我看来应该避免使用。

答案 1 :(得分:2)

如果使用编译时间,则不需要VM参数。