获取Spring容器中Bean的工具类

本文介绍了两种方式实现获取Spring容器中的Bean,包括根据bean名称获取、按类型获取、判断bean是否存在、是否为单例等实用方法,便于在代码中便捷地操作Spring Bean。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、获取Spring容器中Bean的工具类

1、方式一

package 包路径;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component("SpringBeanUtil")
public class SpringBeanUtil implements ApplicationContextAware {
private static ApplicationContext context;


private static SpringBeanUtil servlocator = new SpringBeanUtil();


public void setApplicationContext(ApplicationContext context) throws BeansException {
this.context = context;
}


/**
* 创建读取Bean服务类实例(从spring.xml中加载)
*/
public static SpringBeanUtil getInstance() {
return servlocator;
}


/**
* 根据提供的bean名称得到相应的服务类

* @param servName
*            bean名称
*/
public static Object getBean(String beanId) {
return context.getBean(beanId);
// return beanFactory.getBean(servName);
}


/**
* 根据提供的bean名称得到对应于指定类型的服务类

* @param servName
*            bean名称
* @param clazz
*            返回的bean类型,若类型不匹配,将抛出异常
*/
public static <T> T getBean(String beanId, Class<T> clazz) {


return context.getBean(beanId, clazz);
}


/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true

* @param name
* @return boolean
*/
public static boolean containsBean(String beanId) {
return context.containsBean(beanId);
}


/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)

* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*/
public static boolean isSingleton(String beanId) {
return context.isSingleton(beanId);
}


/**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*/
public static Class getType(String beanId) {
return context.getType(beanId);
}


/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名

* @param name
* @return
* @throws NoSuchBeanDefinitionException
*/
public static String[] getAliases(String beanId) {
return context.getAliases(beanId);
}


@SuppressWarnings("unchecked")
public static <T> T getBeanByName(String beanName) {
try {
return (T) context.getBean(beanName);
} catch (Exception e) {
return null;
}
}


public static <T> T getBeanByType(Class<T> type) {
try {
return context.getBean(type);
} catch (Exception e) {
return null;
}
}
}

2、方式二

package 包路径;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;


@Component("SpringBeanUtil")
public class SpringBeanUtil implements ApplicationContextAware {
private static ApplicationContext context;


private static SpringBeanUtil servlocator = new SpringBeanUtil();


public void setApplicationContext(ApplicationContext context) throws BeansException {
this.context = context;
}


/**
* 创建读取Bean服务类实例(从spring.xml中加载)
*/
public static SpringBeanUtil getInstance() {
return servlocator;
}


/**
* 根据提供的bean名称得到相应的服务类

* @param servName
*            bean名称
*/
public static Object getBean(String beanId) {
return context.getBean(beanId);
// return beanFactory.getBean(servName);
}


/**
* 根据提供的bean名称得到对应于指定类型的服务类

* @param servName
*            bean名称
* @param clazz
*            返回的bean类型,若类型不匹配,将抛出异常
*/
public static <T> T getBean(String beanId, Class<T> clazz) {


return context.getBean(beanId, clazz);
}


/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true

* @param name
* @return boolean
*/
public static boolean containsBean(String beanId) {
return context.containsBean(beanId);
}


/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)

* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*/
public static boolean isSingleton(String beanId) {
return context.isSingleton(beanId);
}


/**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*/
public static Class getType(String beanId) {
return context.getType(beanId);
}


/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名

* @param name
* @return
* @throws NoSuchBeanDefinitionException
*/
public static String[] getAliases(String beanId) {
return context.getAliases(beanId);
}


@SuppressWarnings("unchecked")
public static <T> T getBeanByName(String beanName) {
try {
return (T) context.getBean(beanName);
} catch (Exception e) {
return null;
}
}


public static <T> T getBeanByType(Class<T> type) {
try {
return context.getBean(type);
} catch (Exception e) {
return null;
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值