JAVA普通类获取spring的bean对象

主要转载自:http://412887952-qq-com.iteye.com/blog/1479445

如果在普通类里使用@Resrouce或者@Autoware这个两个注解,在使用的时候会报NEP,

因为如果本类不是springBean的话,那么注入是注入失败的,而且不抱错.

那平时该怎么用呢.可以使用那个什么Context(xxx.xml).getBean()来获取.

但是这样会去读取spring配置文件.如果在web环境里就不实用了.因为spring启动的时候就已经读取了配置文件,难道我们还要每次使用都去读取配置文件吗?

这样是不科学的.我们应该想办法获取到spring的容器,然后直接从容器里面获取.

方案1.继承自抽象类ApplicationObjectSupport

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ApplicationObjectSupport;

/**
 * 获取spring信息的工具类
 * 
 * @author Administrator
 *
 */
public final class ToolSpring extends ApplicationObjectSupport {
	private static ApplicationContext applicationContext = null;

	@Override
	protected void initApplicationContext(ApplicationContext context) throws BeansException {
		// TODO Auto-generated method stub
		super.initApplicationContext(context);
		if (ToolSpring.applicationContext == null) {
			ToolSpring.applicationContext = context;
			System.out.println();
			System.out.println();
			System.out.println("---------------------------------------------------------------------");
			System.out.println(
					"========ApplicationContext配置成功,在普通类可以通过调用ToolSpring.getAppContext()获取applicationContext对象,applicationContext="
							+ applicationContext + "========");
			System.out.println("---------------------------------------------------------------------");
			System.out.println();
			System.out.println();
		}
	}

	public static ApplicationContext getAppContext() {
		return applicationContext;
	}
	
	public static Object getBean(String name) {
		return getAppContext().getBean(name);
	}
	public static Object getBean(Class<?> clazz) {
		return getAppContext().getBean(clazz);
	}
}

并把这个工具类配置到bean里

2.继承自抽象类WebApplicationObjectSupport

跟上个差不多

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationObjectSupport;

/**
 * 获取spring信息的工具类
 * 
 * @author Administrator
 *
 */
public final class ToolSpring extends WebApplicationObjectSupport {
	private static ApplicationContext applicationContext = null;

	@Override
	protected void initApplicationContext(ApplicationContext context) {
		// TODO Auto-generated method stub
		super.initApplicationContext(context);
		if (applicationContext == null) {
			applicationContext = context;
			System.out.println();
			System.out.println();
			System.out.println("---------------------------------------------------------------------");
			System.out.println(
					"========ApplicationContext配置成功,在普通类可以通过调用ToolSpring.getAppContext()获取applicationContext对象,applicationContext="
							+ applicationContext + "========");
			System.out.println("---------------------------------------------------------------------");
			System.out.println();
			System.out.println();
		}
	}

	public static ApplicationContext getAppContext() {
		return applicationContext;
	}

	public static Object getBean(String name) {
		return applicationContext.getBean(name);
	}
	public static Object getBean(Class<?> clazz) {
		return applicationContext.getBean(clazz);
	}

}

同样把类配成bean

3.实现接口ApplicationContextAware

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 获取spring信息的工具类
 * 
 * @author Administrator
 *
 */
public final class ToolSpring implements ApplicationContextAware {
	private static ApplicationContext applicationContext = null;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		// TODO Auto-generated method stub
		if (ToolSpring.applicationContext == null) {
			ToolSpring.applicationContext = applicationContext;
			System.out.println();
			System.out.println();
			System.out.println("---------------------------------------------------------------------");
			System.out.println(
					"========ApplicationContext配置成功,在普通类可以通过调用ToolSpring.getAppContext()获取applicationContext对象,applicationContext="
							+ applicationContext + "========");
			System.out.println("---------------------------------------------------------------------");
			System.out.println();
			System.out.println();
		}
	}

	public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	public static Object getBean(String name) {
		return getApplicationContext().getBean(name);
	}
	public static Object getBean(Class<?> clazz) {
		return getApplicationContext().getBean(clazz);
	}
}

猜你喜欢

转载自blog.csdn.net/dmw412724/article/details/80008241