怎么在普通对象中使用春容器中的对象

  介绍

本篇文章给大家分享的是有关怎么在普通对象中使用春容器中的对象,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>引语:

工作中有时候需要在普通的对象中去调用弹簧管理的对象,但是在普通的java对象直接使用@ autowired或者@的时候会发现被注入的对象是null,会报空指针。我们可以简单的理解为春天是一个公司,它管理的对象就是它的员工,而普通的java对象是其他公司的员工,如果其他公司要找春天公司的员工一起共事没有经过春天公司的同意肯定是不行的。

<强>解决方式:

方法一:如果这个普通对象可以被弹簧管理的话,最好是直接交给弹簧管理,这样弹簧管理的bean中注入其他的bean是没有问题的。

方法二:当我们的普通对象没有办法交给弹簧管理的时候,我们可以创建一个公共的springBeanUtil专门为普通对象提供春的员工(有点像春天公司的外包部门,把对象外包给其他公司使用,哈哈)。

@ service   public  class  SpringBeanUtil  implements  ApplicationContextAware  {      public 才能static  ApplicationContext  applicationContext;      @Override才能   public 才能;void  setApplicationContext (ApplicationContext 上下文),throws  BeansException  {   ,,,applicationContext =,上下文;   ,,}//才能,这里使用的是根据类类型来获取bean 当然你可以根据名称或者其他之类的方法,主要是有applicationContext你想怎么弄都可以   public 才能static  Object  getBeanByClass (Class  clazz), {   ,,,return  applicationContext.getBean (clazz);   ,,}   }

这个跑龙套呢,其实就是实现了ApplicationContextAware接口,有小伙伴要问了这个接口是干嘛的?这里给出链接地址,ApplicationContextAware参考资料。然后我也将文档中的解释给摘录过来了

公共接口ApplicationContextAware延伸意识到
接口实现的任何对象,希望得到通知ApplicationContext它运行在。
实现了这个接口的意义例如当一个对象需要访问一组合作bean。注意通过bean引用比实现了这个接口的配置bean查找的目的。
这个接口可以实现如果一个对象需要访问文件资源,即想叫getResource,想要发布一个应用程序事件,或需要访问MessageSource。然而,它比实现更具体的ResourceLoaderAware, ApplicationEventPublisherAware或MessageSourceAware接口在这样一个特定的场景。
注意文件资源依赖关系也可以公开为bean属性类型的资源,通过与自动类型转换的字符串填充bean工厂。这消除了需要实现任何回调接口的目的只是为了访问一个特定的文件资源。
ApplicationObjectSupport是一个方便的基类为应用对象,实现了这个接口。

大概意思就是说只要实现了ApplicationContextAware接口的类,期望被告知当前运行的applicationContext是什么,然后又说了如果是想要获取资源最好是用ResourceLoaderAware, ApplicationEventPublisherAware或MessageSourceAware这几个接口,最后还来了一句我们知道你们要使用这些接口,所以我们帮你弄了一个实现了这些接口的抽象类ApplicationObjectSupport(在spring上下文的jar包中)。这里说得很清楚要使用bean的话,实现ApplicationContextAware,因为我们这里不需要使用静态资源之类的所以我们就不用弹簧为我们提供的ApplicationObjectSupport了,有兴趣的可以自己研究下。

我们这里简单的看一下ApplicationContextAware类里面都有啥?

void  setApplicationContext (ApplicationContext  applicationContext), throws  BeansException;

发现就一个方法,春天初始化的时候会将当前的applicationContext传给ApplicationContextAware的setApplicationContext方法,所以只要实现类将这个applicationContext拿到了,就可以通过类类型或者类的名称来获取到spring中的bean了。原理其实很简单吧。使用的时候我们可以调用弹簧中bean的。如下:

Test  Test =,(测试),SpringBeanUtil.getBeanByClass (Test.class);

以上就是怎么在普通对象中使用春容器中的对象,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

怎么在普通对象中使用春容器中的对象