弹簧中有两种类型的对象,一个是用户定义的对象,另一个是弹簧容器对象,例如ApplicationContext,BeanFactory等。使用@AutOWared使用@AutOWared和其他方法时注射,但是如果需要使用容器对象,如何注入它?
Spring提供了一种扩展方法,即用于实现容器对象注入的ApplicationContextaware接口。
该接口中只有一种方法,也就是说
创建ApplicationContextaware接口的实现类,以在实现类中获得本地变量上下文,实现SetApplicationContext方法,然后在上下文中接收容器对象。
上下文变量不是必需的。如果您需要在后续业务中使用上下文,则将其存储。如果您在bean初始化时仅使用一次,则不需要。
作为第一个BeanPostProcessor执行。
首先查看bean初始化时每个扩展点的执行顺序。在bean初始化方法中,可以看出执行顺序为:
其中,ApplicationContextaware位于BeanPostProcessorsbeforinialization阶段。您知道吗?
在该方法中,设置每个扩展点的实现。
其中,在方法中,您可以看到它将被添加到BeanPostProcessor中。
再次查看它,它实现了写入该方法的BeanPostProcessor界面。在该方法中,如果发现Bean是一种类型,请调用SetApplicationContext()方法。