2014-09-29 149 views
0

我正在处理几个弹簧问题(弹簧安全通常涉及,但也包括其他技术在标签中提到的这个问题)与@Configuration排序的地方,“太早”或“太迟”初始化某些东西。弹簧安全和@Configuration命令

仅举一个例子:When customizing Tomcat: A ServletContext is required to configure default servlet handling

的答案通常是建立独立的@Configuration文件对于一些豆类,然后开始工作。我得到的错误(堆栈跟踪)的性质通常不会响铃,这可能是我的错误:)

有人可以请指出我在哪里可以找到有关为什么创建单独@Configuration类帮助和如何订单@Configuration类的确定是?

任何有关如何在堆栈跟踪中观察以确定此类问题的提示都将非常感谢。

回答

1

它有时帮助的原因是它为Spring创建bean的顺序提供了其他选项。一个(过度)简单的看待它的方式是说,如果你把所有东西放在一个文件中,那么顺序是由文件的内容决定的。然而,如果你分解它,那么Spring可以探索其他选择,并且可以以另一个更合适的顺序落实到位。请注意,对于@Configuration(只要它们是静态的),您可以使用内部类和包保护类,因此不需要创建新文件。

A @Configuration类也可能是自相矛盾的(例如,您希望@Autowired是在同一个单元中创建的东西 - 有时可用,有时不可用)。另外,在这些情况下,通常会有由Spring创建的组件(不是由您自己的代码明确指出)需要尽早实例化。在完全初始化ServletContext之前,Spring Boot必然需要创建ServletsFilters,这加剧了这种情况。

就堆栈跟踪而言,结果为空的@Autowired依赖性是一种气味。同样在日志中,您可能会看到INFO级别日志,说明某些bean'不适合后处理'。这并不保证是致命的(因此INFO级别),但如果你看到很多它,你可能会遇到麻烦。

我不知道这种推理的任何规范的参考。