通过ApplicationContext获取

这是最大略粗暴的办法,你可以通过ApplicationContext的getBean()方法来获取Bean工具,看如下代码

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); MyBean myBean = (MyBean) context.getBean("myBean");

利用BeanFactory获取

spring怎么调用jspSpring boot挪用Bean办法总结 SQL

BeanFactory是ApplicationContext的父接口,也供应了getBean()方法来获取Bean工具,看如下代码。

BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); MyBean myBean = (MyBean) factory.getBean("myBean");

把稳,XmlBeanFactory类已经在较新的Spring版本中被废弃,建议利用ApplicationContext或实在现类。

上面的方法须要好,实现了不在spring容器中的类去调用容器中的bean。
但是这样做却有一个缺陷,那就加载了两次 spring 容器。
由于我们在启动spring 容器时已经进行了配置。
现在可以考虑在启动 web 做事器的时候,就把 Application 放在某一个类中,我们通过这个类在获取,这样就可以在普通类获取 spring bean 工具了。

import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (SpringUtil.applicationContext == null) { SpringUtil.applicationContext = applicationContext; } } // 获取 applicationContext public static ApplicationContext getApplicationContext() { return applicationContext; } // 通过 name 获取 Bean. public static Object getBean(String name) { return getApplicationContext().getBean(name); } // 通过 class 获取 Bean. public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } // 通过 name,以及 clazz 返回指定的 Bean public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }

在调用类中利用@bean表明加载SpringUtil。

@Bean public SpringUtil springUtil() { return new SpringUtil(); }

这样普通的未被spring容器管理的类也可以通过SpringUtil.getBean() 获取到 Spring IOC 容器中的 bean了。

每天一个小知识,每天进步一点点!


[加油][加油][加油]