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 回答