我有两个maven项目,说MvnSpring和MvnGuice.MvnSpring正在研究春季和冬眠框架的作品。 MvnGuice正在研究谷歌guice和mybatis。我需要将这两个功能结合在一起。 两者都遵循单例模式。编码时我需要在MvnGuice中获得一些MvnSpring。为此,我创建了一个MvnSpring的jar,并将其放入.m2存储库,并在MvnGuice中提供依赖关系详细信息。现在我可以在MvnGuice类中导入MvnSpring类.MvnSpring使用spring依赖注入,MvnGuice使用guice依赖注入来创建对象。现在在MvnSpring流程中是MSserviceImpl(实现MSservice)> MSdaoImpl(实现MSdao)。现在我需要从MvnGuice中调用MSService类。然后在运行时显示错误,如MSService类为null。然后我在MvnGuice中为MSService类做了一个guice依赖注入。现在控件到达MSserviceImpl,但现在MSdao在这里为null。是否有可能与MvnGuice一起启动MvnSpring。我希望我能解决这个问题。在两个框架上结合两个基于maven的项目
回答
虽然Spring和Guice针对同一个问题IoC,但他们采用完全不同的方法来解决它。它们在功能和配置方式上有所不同,Spring有bean定义,Guice使用绑定。
幸运的是,它们有共同的理由,它们都支持JSR-330这一定义了一组注释的标准规范。这使您能够编写单例并描述他们需要的注入,而不依赖于Spring或Guice。
这样,无论您在特定项目中使用的框架如何,您都可以在项目之间共享您的单身人士。我不会推荐在同一个项目中同时使用Guice和Spring,除非它们之间有明确的分隔。例如,你可以使用Guice作为Spring代码通过定义的API使用的模块,它隐藏了它在内部基于Guice的事实。
已经提到过JSR-330。 对于某些情况下,它可能是不够的,比如,你有代码:
final String className = config.getProperty(«serviceImpl»);
// Class.forName(name) and check required interface for type safety
final Class<? extends Service> serviceClass = Reflection.classForName(className, Service.class);
final Service service = injector.getInstance(serviceClass);
在不同的DI环境中,您都应该支持com.guice.inject.Injector.getInstance()和org.springframework.context .ApplicationContext.getBean()实现。
有草案解决方案sdif4j简单的依赖注入门面。 这个项目的想法是封装不同的DI框架逻辑与自己的抽象,以扩展默认的JSR-330的可能性。请注意,目前还没有公开发布,但您可以找到如何解决问题或在分支中进行内部发布的想法。 一般问题是,你的MvnSpring和MvnGuice项目都应该基于JSR-330(而不是guice/spring注释)和org.sdif4j:sdif4j-api(或者你自己的抽象;只有需要注入器功能)。建议使guice和spring依赖可选(编译但不导出)以允许库客户端自己选择DI。 在您的MvnCompineGuiceAndSpring中,您只需声明sdif4j-guice或sdif4j-spring依赖项(它类似于slf4j的用法)并配置您的DI环境。您可以在测试子项目中找到不同的示例。
更多注意事项: Spring的默认范围是singleton,Guice - prototype(Spring术语)。所以,如果你想有一个原型的bean,你可以使用:
@org.springframework.context.annotation.Scope("prototype")
@javax.inject.Named
public class TestPrototype {
}
Spring的@Scope注解应该由吉斯即使弹簧不会出现在你的classpath被忽略。 还必须声明你的所有辛格尔顿豆@ javax.inject.Named和@ javax.inject.Singleton注解支持Spring和吉斯,像这样:
@javax.inject.Named
@javax.inject.Singleton
public class TestSingleton implements ITestSingleton {
public TestSingleton() {
}
}
与@Scope注解,你可以在你的代码中使用@ImplementedBy(@ProvidedBy)guice注释(在可行的情况下;小心使用它,通常这不是一个好习惯),这在Spring DI中也应该被忽略(在这两种情况下,如果Spring存在于classpath中)。
希望,很明显。
- 1. 合并两个Maven项目?
- 2. 在Eclipse中结合两个Java项目
- 3. 两个框架jQuery和Prototype在一个项目上。
- 4. 基于两个项目的类型和
- 5. 发挥框架Crud和两个项目
- 6. 结合两个ASP.NET Core MVC项目
- 7. 结合项目两个列表
- 8. 我如何结合两个Android项目
- 9. 基于两列合并两个文件
- 10. 如何组合基于两列的两个数据框?
- 11. iOS(或OS X)项目取决于框架的两个版本
- 12. 如何在iPhone上结合两个项目?
- 13. 合并两个laravel项目
- 14. 合并两个VB.Net项目
- 15. 合并两个android项目
- 16. 合并两个项目
- 17. 两个项目的Maven配置
- 18. 可以在同一个项目中使用两个框架吗?
- 19. 如何将两个maven webapps合并到一个项目中
- 20. 组合框结合基础上的两个来源性质的平等选择项目使用的DataTemplate
- 21. 结合两个SharedArrays的基本操作
- 22. 如何使用node.js结合基于id(transectionid)的两个集合?
- 23. Git:创建一个项目框架,并让项目基于框架
- 24. 合并或合并两个项目。两个代表,两个窗口
- 25. 在一个项目中的三个框架的Maven原型
- 26. 在列表中组合两个项目
- 27. 两个项目
- 28. 基于上一个组合框的Excel组合框下拉项目
- 29. 合并两个集合,总结等领域的重复项目
- 30. 结合两个文本框的值