Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
否";新";Java Spring的对象以及如何将遗留应用程序转换为;“春天”;概念_Spring_Legacy Code - Fatal编程技术网

否";新";Java Spring的对象以及如何将遗留应用程序转换为;“春天”;概念

否";新";Java Spring的对象以及如何将遗留应用程序转换为;“春天”;概念,spring,legacy-code,Spring,Legacy Code,我刚刚开始学习JavaSpring以及依赖注入(DI)和控制反转(IoC)的概念 我了解到,所有对象,无论是单例、原型还是请求和会话,都是从容器中检索的 容器管理类之间的依赖关系和对象的生命周期/范围 这背后的基本思想是,对于使用Spring框架作为系统主干的应用程序,没有“新”的操作符。(如果我错了,请纠正我) 我想使没有Spring框架编码的遗留应用程序现代化,管理第三方库类,并使用Spring注入它们 我应该如何处理这个问题 我了解到,所有对象,无论是单例、原型还是请求和会话,都是从容器中

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

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

容器管理类之间的依赖关系和对象的生命周期/范围


这背后的基本思想是,对于使用Spring框架作为系统主干的应用程序,没有“新”的操作符。(如果我错了,请纠正我)

我想使没有Spring框架编码的遗留应用程序现代化,管理第三方库类,并使用Spring注入它们

我应该如何处理这个问题

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

这是不对的。不是所有的对象,而是那些您让参与者解析的对象,都是从容器中检索的。通常,您可以使用
@组件
来标记容器应该知道哪些对象。除了
@Component
之外,还有其他注释在原则上也是如此,但允许更细粒度的语义,例如
@Repository
,它位于
@Component
的底部,并将
@Target
@Retention
@Documented
放在顶部

容器管理类之间的依赖关系和对象的生命周期/范围

对。容器为您进行连接,即解析使用
@Ressource
@Autowired
@Inject
注释的依赖项,具体取决于您喜欢的注释。 在
生命周期期间
可能存在允许使用回调的事件。 另外:您可以确定


这背后的基本思想是,对于使用Spring框架作为系统主干的应用程序,没有“新”的操作符。(如果我错了,请纠正我)

基本原则是,将特定类型对象的创建委托给容器。对象的
创建
使用
的分离允许更大的灵活性,从而提高应用程序的可测试性

除了应用程序的“组件”之外,还有一些典型的容器,如ArrayList或HashMap,您可以像以前一样在这些容器上使用新操作符

我想使没有Spring框架编码的遗留应用程序现代化,管理第三方库类,并使用Spring注入它们

我应该如何处理这个问题

综上所述,应该是“简单的”:

1)检查每个类文件并查找其依赖项

2)重构这些组件,并将
@Component
放在类的顶部 特殊情况:第三方对象,您无权访问源。然后,你必须自己将其结构封装到工厂中,例如,使用

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

4)使用
@service
而不是
@Component
重构服务层的组件

5)重构数据访问层,您可以使用
@Repository
而不是使用
@Component


这应该为您提供一个工作基础。

我不知道我们如何回答这样一个模糊的问题,但您永远不应该使用new,因为您使用的是Spring的想法是不正确的。这就像说你永远不应该使用
if
一样不正确,因为你使用了多态性。在有意义时使用Spring组件,对体系结构的无状态组件(控制器、服务、DAO)建模。如果您开始从Spring上下文而不是使用new来查找原型bean,则会出现问题。@JBNizet“如果您开始从Spring上下文而不是使用new来查找原型bean,则会出现问题”为什么不应该使用Spring来注入原型bean?根据我的理解,我可以使用容器查找原型bean。这里的关键是查找与注入。注射豆类是好的。这就是依赖注入的意义所在。在上下文中查找bean“因为新是邪恶的”只会无缘无故地使代码更加混乱,而依赖注入正是试图避免的。使用Spring定义一个干净的、可测试的体系结构,使用AOP处理事务等。不要使用它来避免出现新问题。@JBNizet好的,查找和注入之间有什么区别?如果我有一个Hibernate实体要在我的PageBeans(JSF)上使用,我应该使用Autowired还是new operator?Inject意味着将组件B自动连接到a中,并从a中使用B。Lookup意味着从a调用context.getBean()以获取B实例。实体应使用新的创建方法创建。如果不使用new并查找它,您会得到什么?根据定义,实体不由Spring处理。它们由Hibernate处理。“这背后的基本思想是,对于使用Spring框架作为系统主干的应用程序,没有“新”操作符。(如果我错了,请纠正我)。”您可能有@Bean方法,其中使用“新”操作符作为Java配置的一部分。但是,正如您所说的,容器管理对象并且您自己不实例化对象是很重要的。