Spring Web 工具类 : SpringBeanAutowiringSupport 手工触发bean依赖注入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andy_zhang2007/article/details/88668581

通常情况下,我们总是使用Spring容器完全托管的bean组件,实例的创建和属性注入都由框架自动完成,开发人员可以将注意力集中到业务逻辑上。但在有些情况下,bean在容器外部创建,对于这种生命周期不完全受容器控制的bean,其中的@Autowired/@Value注解缺省是不生效的,换句话讲,对于这种bean,容器不会对它们进行自动注入。这种情况下,如果需要对这些bean进行这些属性的注入,就需要使用其他的方法。SpringBeanAutowiringSupport就是框架提供的一个这样的工具类,用于手工触发一个bean的依赖注入。

SpringBeanAutowiringSupport提供了两个静态工具方法 :

  1. public static void processInjectionBasedOnCurrentContext(Object target)
    该方法会使用ContextLoader.getCurrentWebApplicationContext()获取当前Web应用上下文,然后对目标bean target触发依赖注入。

  2. public static void processInjectionBasedOnServletContext(Object target, ServletContext servletContext)
    该方法会使用指定的servletContext,获取它对应的Web应用上下文,然后对目标bean target触发依赖注入。

以上两个工具方法基于所获取到的Web应用上下文对目标对象执行依赖注入的逻辑都是一样的,如下所示 :

// WebApplicationContext cc 是所获取得到的Web应用上下文
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
bpp.setBeanFactory(cc.getAutowireCapableBeanFactory());
bpp.processInjection(target);

关于AutowiredAnnotationBeanPostProcessor及其方法processInjection如何工作,可以参考这篇文章

猜你喜欢

转载自blog.csdn.net/andy_zhang2007/article/details/88668581