sping获取bean方法 解决资源耗尽

时间:2023-09-03 11:37:31
//      ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","spring-xxxxx.xml"});
// BeanFactory factory = (BeanFactory)context;
// MonitorServer ce = (MonitorServer) factory.getBean("monitorServer");

类似于上面的这种,通过种种方式得到测试中都遇到资源耗尽的严重bug,

于是找高手请教,得到如下解决方法:而且效率很高,很易用。下面是代码L

package org.company.xxx;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
*
* 获取spring容器,以访问容器中定义的其他bean
* @author lyltiger
* @since MOSTsView 3.0 2009-11-16
*/
public class SpringContextUtil implements ApplicationContextAware { // Spring应用上下文环境
private static ApplicationContext applicationContext; /**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
*
* @param applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
} /**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
} /**
* 获取对象
* 这里重写了bean方法,起主要作用
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
} }

z只要将其类放在工程中的合适位置,直接用类名使用,无论何时何地……

使用:

java类中:

MonitorServer md = (MonitorServer)SpringContextUtil.getBean("monitorServer");//bean的名称

spring配置文件中:

<bean id="monitorServer"
class="com.company.xxxxx.MonitorServer">
<property name="dataSource" ref="dataSource" />
</bean>

这样就可以得到我们想要的bean了,里面的方法随意调用,得到我们想要的数据。
OK!