nic*_*ild 9

这取决于scopebean被注释.如果它是范围的singleton,那么它将在Spring中的任何地方使用相同的实例ApplicationContext.如果它是范围prototype,则将在每个位置使用新实例.

<bean id="id" class="some.NewObject" scope="prototype"/>
<bean id="id2" class="some.AnotherNewObject" scope="singleton"/>
Run Code Online (Sandbox Code Playgroud)

这些bean定义与以下代码相结合将有助于说明.

class Class1 {
    @Autowired
    some.AnotherNewObject obj;
}

class Class2 {
    @Autowired
    some.AnotherNewObject obj;
}

class Class3 {
    @Autowired
    some.NewObject obj;
}

class Class4 {
    @Autowired
    some.NewObject obj;
}
Run Code Online (Sandbox Code Playgroud)

Class1并且Class2将接收到的相同的实例的引用some.AnotherNewObject. Class3并且Class4将接收到的不同实例的引用some.NewObject.

如果使用注释和包扫描进行配置,则可以使用@Scope注释指定范围:

@Component
@Scope("prototype")
class NewObject {
    ...
}

@Component
@Scope("singleton")
class AnotherNewObject {
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 很好,但是它如何更改注释中的范围? (2认同)