如果他们是,如何阻止?Spring的@Autowired对象是否被重用?
回答
这取决于bean
被注释的scope
。如果它的范围是singleton
,那么它将在Spring ApplicationContext
的每个地方使用相同的实例。如果它的范围是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 {
...
}
好,但它如何改变注解的范围? – AhHatem 2012-08-14 13:16:05
你是什么意思,你可以提供更多的上下文吗?您不能使用'@ Autowired'注释来更改bean的范围。 – 2012-08-14 13:17:52
但是你可以用bean上的注解本身来改变作用域 – NimChimpsky 2012-08-14 13:20:19
@Service
@Scope("prototype")
public class CustomerService
{}
我不明白为什么原型/单例.//没有被Spring声明为枚举。 – Eugene 2012-08-14 17:38:32
@Eugene出于这个原因:http://stackoverflow.com/a/11741450/106261 – NimChimpsky 2012-08-14 19:31:44
我同意这个帖子,其中答案谈论一个控制器内的页面的价值,但在这里我们可以使用一个枚举的原型,这将是一个编译时间常量,Scope注释会将ENUM作为输入,而不是String。例如Hibernate的GeneratedValue可以做到这一点。 – Eugene 2012-08-14 19:40:49
- 1. @Autowired是否只涉及一个对象?
- 2. Spring @Autowired注解和ContextComponent扫描和@autowired注释对象
- 3. Spring @Autowired字段是否自动隐私?
- 4. spring @autowired
- 5. 使用@Autowired在Spring对象注入时抛出的NullPointerException异常
- 6. 为什么spring @autowired是null?
- 7. 如何在构造函数中为不是Spring的对象使用autowired参数?
- 8. 如何在Scala对象中使用Spring Autowired(或手动连线)?
- 9. Java lambda匿名对象是否被重用?
- 10. 使用Spring的@Autowired和scala
- 11. 是否可以在@Service中使用Spring 3 @Autowired注释?
- 12. spring @ autowired nullpointer
- 13. Spring @Component @Autowired
- 14. Spring Boot Autowired null
- 15. Inject URL()Spring Autowired
- 16. Spring autowired user
- 17. Spring @Autowired和@Qualifier
- 18. Vaadin-spring autowired
- 19. Spring Boot - Autowired MongoClient
- 20. Spring Framework Autowired
- 21. 如何获取并设置Spring的Autowired对象?
- 22. 是否可以确定一个对象是否被另一个对象引用?
- 23. 自我对象是否会被Python的多重处理共享?
- 24. 重新确认SceneKit中的对象是否已被点击
- 25. Spring中的AutoWired Setter而不是AutoWired实例变量
- 26. 对象是否可以被更早的销毁,以使其存储内存可以被后续对象重用?
- 27. 是否可以重用backgroundworker对象?
- 28. 重用javax.xml.ws.Service对象是否安全?
- 29. 使用processing.Manager时对象是否重复?
- 30. Spring @Autowired bean null null
使用原型范围 – 2012-08-14 13:10:45
为什么要停止呢? – NimChimpsky 2012-08-14 13:15:44