3

And if they are, How to stop that?

4

2 回答 2

9

这取决于被注释scope的对象。bean如果它是有范围的singleton,那么它在 Spring 中的任何地方都将使用相同的实例ApplicationContext。如果它是 scope prototype,那么将在每个位置使用一个新实例。

<bean id="id" class="some.NewObject" scope="prototype"/>
<bean id="id2" class="some.AnotherNewObject" scope="singleton"/>

这些 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;
}

Class1并将Class2收到对同一实例的引用some.AnotherNewObjectClass3并将Class4收到对不同实例的引用some.NewObject

如果您使用注解和包扫描进行配置,那么您可以使用@Scope注解来指定您的范围:

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

@Component
@Scope("singleton")
class AnotherNewObject {
    ...
}
于 2012-08-14T13:09:59.720 回答
3
@Service
@Scope("prototype")
public class CustomerService 
{}
于 2012-08-14T13:17:31.777 回答