我已经抓住了很多资源,并且已经完成了这项工作并且它有点复杂,这使我开始要求对如何正确地将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)会出现依赖关系。
请分享您的经验,谢谢!
答案 0 :(得分:3)
1:当您开始动态注入域对象时,它们实际上不再是域对象,因为域应该反映您的信息模型,而与任何业务规则和功能逻辑无关。
2:记住KISS(保持简单......)。在某些时候,其他人可能不得不取得所有权并维护您的代码,因此对该人有一些怜悯:)
我认为这是一种反模式,在我看来应该避免使用。
答案 1 :(得分:2)
如果使用编译时间,则不需要VM参数。