该方法用于获取 Spring 容器中指定类型的所有 JavaBean 对象。
语法:
getBeansOfType(Class type)
参数说明:
- type:指定的类的 Class 示例。
返回值:容纳指定类型JavaBean对象的Map集合。
示例
首先获取容器中 Date 类的所有 JavaBean 名称,然后获取所有 Date 类的 JavaBean 的 Map 集合,再使用 JavaBean 名称分别获取示例对象,最后输出结果,关键代码如下:
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext(
"appContext.xml");
String[] eanNames =
context.getBeanNamesForType(Date.class); //获取指定类型的所有JavaBean对象
Map beans = context.getBeansOfType(Date.class); //获取容器中指定类
for(String name:beanNames){
Date bean = (Date)beans.get(name);
System.out.println("名称为"+name+"的JavaBean输出结果为:"
+bean);
}
}
该示例的配置文件代码如下:
<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.
springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="time"class="java.util.Date"></bean>
<%--配置JavaBean--%>
<bean id="time2"class="java.util.Date"></bean>
<bean id="time3"class="java.util.Date"></bean>
</beans>
延展:
可以通过这种方式获取容器中定义的扩展点类型,基于业务场景路由到具体的业务扩展点实现类上面;
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
public static <T> List<T> getBeanListOfType(Class<T> clazz) {
List<T> result = new ArrayList<>();
Map<String, T> map = applicationContext.getBeansOfType(clazz);
if (null != map) {
result.addAll(map.values());
}
return result;
}
}