And if they are, How to stop that?
3336 次
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.AnotherNewObject。 Class3并将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 回答