@Component vs java中的new运算符

时间:2016-02-25 12:54:10

标签: java spring model-view-controller

我是Spring概念的新手,所以我对@Component几乎没有什么困惑,默认情况下是一个单例,只要加载一个类并重复使用相同的实例,就会创建一个实例;新操作员也是如此。如果一个类声明为singleton,我们可以使用setter和getter更改类的属性,也可以使用new运算符。

2 个答案:

答案 0 :(得分:1)

@Component注释表示该对象由Spring管理:即框架创建它。通常你应该使用Spring的dependdenci注入机制:我的意思是你不需要自己创建组件实例,而是将提供的实例注入你的代码中。 在这里阅读IoC范例:https://en.wikipedia.org/wiki/Inversion_of_control

另外,您实际上可以将Spring托管bean的范围更改为不同的单例(see tutorial here),但如果您已经自己实现了一些单例类,则无法覆盖它的行为

顺便说一句,你不应该使用 new 运算符来实现单例(实际上你因为私有构造函数而无法使用),使用 getInstance()等方法代替

答案 1 :(得分:1)

当您调用new时,您将在运行时手动创建实例。

假设您有一个名为“N' N'我称之为服务的次数。

Java

在普通的java中,您将通过调用new来创建一个新对象。这意味着,您正在创建' n'对象数

<强>弹簧

在Spring中,当您只是在服务器中部署应用程序或加载spring XML/Configuration class时,Spring会创建所有注释类的实例,并存储在spring容器中。现在,即使你的控制器被调用了一次,spring也会一次又一次地使用同一个对象 因为您不会调用new而是使用另一个名为自动装配的注释