Spring的@Autowired对象是否被重用?

时间:2012-08-14 13:03:13

标签: spring dependency-injection

如果他们是,如何制止?

2 个答案:

答案 0 :(得分:9)

这取决于被注释的scope的{​​{1}}。如果它是作用域bean,则它将在Spring singleton中的任何位置使用相同的实例。如果它是范围ApplicationContext,则将在每个位置使用新实例。

prototype

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

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

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

答案 1 :(得分:4)

@Service
@Scope("prototype")
public class CustomerService 
{}