JAVA普通类获取spring的bean对象
程序员文章站
2022-05-23 10:06:06
...
主要转载自: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);
}
}
上一篇: Spring配置Bean的方式
推荐阅读
-
FastJson序列化自定义返回字段,普通类从spring容器中获取bean
-
普通类注入不进spring bean的解决方法
-
Spring(18)——使用Java类的形式定义bean(二)
-
Spring获取ApplicationContext对象工具类的实现方法
-
SpringBoot实现其他普通类调用Spring管理的Service,dao等bean
-
Spring 注解中,普通类获取@Service标记的方法 或者bean对象的两种方法
-
获取接口所有实现类的两种方法 spring和java spi
-
Java获取接口所有实现类的两种方法 spring和java spi
-
java如何保证获取一个类对象时,获取的是同一个对象
-
Spring(18)——使用Java类的形式定义bean(三)