场景:当使用到工厂模式的时候,并在工厂实例中使用外部的service层对象,会这个对象是一个空对象,因此有必要通过spring ApplicationContext 去获取bean
1、代码案例如下,拿着可以直接用
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;@Componentpublic class SpringBeanUtil implements ApplicationContextAware { private static Logger springBeanUtilLog = LoggerFactory.getLogger(SpringBeanUtil.class); private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringBeanUtil.applicationContext == null) { SpringBeanUtil.applicationContext = applicationContext; } springBeanUtilLog.info("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext={}",SpringBeanUtil.applicationContext); } /** * 获取applicationContext * @return */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 通过name获取 Bean. * @param name * @return */ public static Object getBean(String name){ return getApplicationContext().getBean(name); } /** * 通过class获取Bean. * @param clazz * @param * @return */ public static T getBean(Class clazz){ return getApplicationContext().getBean(clazz); } /** * 通过name,以及Clazz返回指定的Bean * @param name * @param clazz * @param * @return */ public static T getBean(String name,Class clazz){ return getApplicationContext().getBean(name, clazz); }}
2、测试结果
![3cff1650b2a73dd5ebe2d8cb8b3c8975.png](https://i-blog.csdnimg.cn/blog_migrate/b950daca96623b57fb617bfe7648fd40.jpeg)
测试代码
![26fe1da193b24de0a2850d019a76ea93.png](https://i-blog.csdnimg.cn/blog_migrate/bb14847441ec7ed946fb0148e23818ed.jpeg)
idea可以看到到userService是有值
![1a8371c5e369ba096cab0eebea0a0e8b.png](https://i-blog.csdnimg.cn/blog_migrate/1572315d475471588ae382fe487dd572.jpeg)
查询结果展示
拿去,直接用就行,我前面的一个项目就使用到。
希望大家喜欢,点赞+关注+z,谢谢!!!
如果有问题请私聊