春季-我应该在这些域类上使用依赖注入吗?
在以下示例中,我是否使用依赖项注入:
现在其他地方:
根据JSR-330的规定,Provider的get()方法返回Order的新实例,但是哪些对象传递给了新Order的构造函数?如您所见,订单具有其自己的依赖关系,在将实际的订单对象检索到方法之前,必须将其注入. 如果没有DI,我只需创建所有必要的参数,然后将它们传递给新顺序的构造函数即可.那我应该在这里使用DI吗? 编辑: 这是没有DI的代码的样子:
如您所见,我具有用户名和订单项的ID,可以从DAO获取它们的实例.然后,将这些实例传递给Order的子类的构造函数以获取实例.这个过程对我来说似乎很清楚.我的意思是我该如何使用DI来使我的代码享受PersistOrder和Order类之间的解耦?还是在此示例中使用DI会使逻辑更加复杂? 最佳答案
如果没有依赖项注入,则可以将域对象视为贫血对象,这可以说是一种反模式.如果没有数据结构,而没有相关的行为,那么您将失去OO的许多好处.例如,要评估Order.isValid(),您可能需要注入一些依赖项以执行验证.
您可以使用以下方法在Spring容器上下文之外的类上进行依赖项注入:
然后,您将bean的配方声明为原型,Spring将使用AOP修饰构造函数并查找所需的依赖项. .即使它查找依赖项,对您的最终效果还是依赖项注入,因为您只需更改一行就可以注入其他可评估Order.isValid()的东西. 这样,当您执行新订单或从持久性工厂获取订单时,该订单已具有“已注入”依赖项. 为此,需要aspectJ编织,而不仅仅是Proxy / CGLib编织,这是默认设置.您可以通过Java代理使用运行时编织,也可以使用构建时编织. . .我建议前者进行集成测试,而后者则进行部署. . . 服务与域对象: 既然您可以选择富域对象,那么问题就变成了放置内容的位置.服务还是实体?我的看法是,服务应基于可重用的域对象来协调特定于用例的过程.该服务是外部订户进入您系统的非OO网关. . . Google Spring @Configurable,以获取有关基于AspectJ的域类依赖注入的更多信息和教程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |