Java Spring 没有 "new" 个对象以及如何将遗留应用程序转换为 "Spring" 概念

No "new" objects for Java Spring and how to convert legacy application to "Spring" concept

我刚刚开始学习 Java Spring 以及依赖注入 (DI) 和控制反转 (IoC) 的概念。

我了解到所有对象无论是单例、原型还是请求和会话,都是从容器中检索的。

容器管理对象的 类 和 lifecycle/scope 之间的依赖关系。

这背后的基本思想是没有 "new" 运营商使用 Spring 框架作为系统的 backbone 应用程序。 (如有错误请指正)

我想对未使用 Spring 框架编码的遗留应用程序进行现代化改造,并管理第 3 方库 类 并使用 Spring.

注入它们

我该如何处理?

I learned that all objects whether it is singleton, prototype or request and sessions, are all retrieved from the container.

这不太正确。不是 all 对象,而是那些你让 cotainer 告诉解析的对象,是从容器中检索的。通常,您使用 @Component annotation to mark which of your objects should the container know of. Besides @Component there are other annotations which do in principle the same, but allow a more finegrained semantics, e.g. @Repository annotation,它位于 @Component 的底部,并将 @Target@Retention@Documented 放在顶部。

The container manages the dependencies between classes and the lifecycle/scope of the object.

是的。容器会为您进行连接,即根据您喜欢的注释解析使用 @Ressource@Autowired@Inject 注释的依赖项。 在 lifecycle 期间可能会发生事件,允许使用 lifecycle 回调。 另外:您可以确定 bean scope.

The fundamental idea behind this is there are no "new" operators for application using Spring Framework as the backbone of the system. (Please correct me if I am wrong).

基本原则是,您将创建 某种对象的任务委托给容器。 creationconsumption 对象的分离允许更大的灵活性,从而提高应用程序的可测试性。

除了您的应用程序的“组件”之外,还有例如典型的 containersArrayListHashMap,你可以在其上使用 new-运算符和以前一样。

I wanted to modernize legacy applications coded without the Spring framework and manages the 3rd party libraries classes and injects them using Spring.

How should I approach this?

从上面说的,应该是“简单”的:

1) 遍历每个 class 文件并查找其依赖关系

2) 重构它们并将 @Component 放在 class 之上 特殊情况:第 3 方对象,您无权访问源。然后你必须自己将其构造包装到 factory 中,例如@Bean.

3) 通过@Autowired 添加缺少的依赖项(用于标记依赖项的spring 特定注解)

4)@Service annotation 而不是 @Component 重构 服务层 的组件].

5)重构数据访问层,不用@Component,可以用@Repository.

这应该为您打下基础。