我刚刚开始学习Java Spring以及依赖注入(DI)和控制倒置(IOC)的概念。
我了解到所有对象是单例,原型或请求和会话都从容器中检索。
容器管理阶级和对象的生命周期/范围之间的依赖项。
这背后的基本想法是,没有"新"操作员使用弹簧框架作为系统的骨干。(如果我错了,请纠正我)。
我想在没有弹簧框架的情况下进行编码的旧应用程序现代化,并管理第三方库类,并使用Spring注入它们。
我应该如何处理?
我了解到所有对象是单例,原型还是请求和会话,都从容器中检索到。
那不是完全正确的。并非所有所有对象,而是您被告知要解决的那些对象,是从容器中检索的。通常,您使用@Component
注释来标记容器应知道的对象。除了@Component
,还有其他注释原则上相同,但允许使用更细化的语义,例如@Repository
注释,在其基本@Component
上,并将@Target
,@Retention
,@Documented
放在顶部。
容器管理阶级和对象的生命周期/范围之间的依赖项。
是。该容器为您提供了接线,即用@Ressource
,@Autowired
或@Inject
注释的依赖关系,这取决于您喜欢的注释。在lifecycle
期间,可能会有可能的事件,可以使用生命周期回调。另外:您可以确定豆范围。
这背后的基本思想是没有新事物。使用弹簧框架作为系统的骨干进行应用程序。(如果我错了,请纠正我)。
基本原则是,您将某种形式的对象的创建委托给容器。对象的creation
和consumption
的分离可以更大的灵活性,因此您的应用程序可以更好地测试性。
除了"组件"之外在您的申请中,有例如典型的容器喜欢 arraylist 或 hashmap ,您像以前一样使用 new operator。
我想在没有弹簧框架的情况下进行编码的旧应用程序现代化,并管理第三方库类,并使用Spring注入它们。
我应该如何处理?
从上面所说的,应该是"简单":
1)浏览每个类文件并寻找其依赖项
2)重构将其丢掉,然后将@Component
放在上面特殊情况:第三方对象,您无法访问源。然后,您必须将其构造自己包裹在工厂中,例如与@bean。
3)通过@Autowired
(标记依赖项的弹簧特定注释)添加丢失的依赖项)
4)
服务层的重构组件 @Service
@Component
andotationinstead。
5)重构数据访问层,而不是使用@Component
,可以使用@Repository
。
这应该使您可以与您一起工作。