如何取得Spring管理的bean

2024年11月28日 19:03
有2个网友回答
网友(1):

通用的方法来了,神器啊,前的 1、2两种方法并不通用,可以抛弃了。

在配置文件中加入:

Xml代码





Java代码

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

/**

* 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.

*

*/

public class SpringContextHolder implements ApplicationContextAware {

private static ApplicationContext applicationContext;

/**

* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.

*/

public void setApplicationContext(ApplicationContext applicationContext) {

SpringContextHolder.applicationContext = applicationContext; // NOSONAR

}

/**

* 取得存储在静态变量中的ApplicationContext.

*/

public static ApplicationContext getApplicationContext() {

checkApplicationContext();

return applicationContext;

}

/**

* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.

*/

@SuppressWarnings("unchecked")

public static T getBean(String name) {

checkApplicationContext();

return (T) applicationContext.getBean(name);

}

/**

* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.

*/

@SuppressWarnings("unchecked")

public static T getBean(Class clazz) {

checkApplicationContext();

return (T) applicationContext.getBeansOfType(clazz);

}

/**

* 清除applicationContext静态变量.

*/

public static void cleanApplicationContext() {

applicationContext = null;

}

private static void checkApplicationContext() {

if (applicationContext == null) {

throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");

}

}

}

网友(2):

方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId"); 说明: 这种方式适用于采用Spring框架的独立应用程序,需要程序