获取Spring加载的实例bean/获取注解Beam
来源:互联网 发布:英语语法纠正软件 编辑:程序博客网 时间:2024/05/16 12:16
1,编写工具类
package com.cfwx.rox.web.business.essence.util;import java.util.HashMap;import java.util.Map;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;/** * 获取spring的注入bean 工具类 * @author JSW * */public class SpringContextUtil implements ApplicationContextAware{ private static ApplicationContext context = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } /** * 获取在*.xml文件中有注入的bean * @param beanName * @return */ @SuppressWarnings("unchecked") public static <T> T getBean(String beanName){ return (T) context.getBean(beanName); } /** * 获取到的类的实例对象 */ private Map<String, Object> classInstances; /** * 获取到的类的实例对象 指定spring注解的类对象 */ public Map<String, Object> getClassInstances() { if(this.classInstances == null){ init(); } return this.classInstances; } @SuppressWarnings("static-access") public void init(){ if(this.context == null){ return; } if(this.classInstances == null){ this.classInstances = new HashMap<String,Object>(); } Map<String, Object> beansWithAnnotationMap = this.context.getBeansWithAnnotation(org.springframework.stereotype.Service.class); Class<? extends Object> clazz = null; for(Map.Entry<String, Object> entry : beansWithAnnotationMap.entrySet()){ clazz = entry.getValue().getClass();//获取到实例对象的class信息 Class<? extends Object> [] interfaces = clazz.getInterfaces(); for(Class<? extends Object> aInterface : interfaces){ //接口实例名(只是将接口的首字母换成小写) String aInterfaceSimpleName = getDefaultInstanceName(aInterface); classInstances.put(aInterfaceSimpleName, entry.getValue()); } } } /** * 根据这个类来获取默认的实例名(默认:将首字母换成小写) * @param clazz 类信息 * @return 默认的实例名 */ public static String getDefaultInstanceName(Class<?> clazz) { if (clazz == null) { return null; } String className = clazz.getSimpleName(); String firsrLowerChar = className.substring(0, 1).toLowerCase(); className = firsrLowerChar + className.substring(1); return className; } }
2, application.xml中注入
<bean id="springContextUtil" class="com.cfwx.rox.web.business.essence.util.SpringContextUtil"></bean>
3, web.xml中配置监听
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
阅读全文
0 0
- 获取Spring加载的实例bean/获取注解Beam
- 代码获取Spring注解的bean
- 代码获取Spring注解的bean!!
- spring获取bean 实例
- Spring获取bean实例
- spring boot获取注入的实例bean
- Spring之Bean容器初始化以及bean实例的获取
- Spring启动后获取所有拥有特定注解的Bean
- quartz如何获取spring注解注入的bean
- Spring启动后获取所有拥有特定注解的Bean
- 单元测试使用spring注解获取bean
- spring注解时,如何手工获取bean
- Spring源码之bean的加载(四)获取单例
- 读Spring的源代码四:获取bean实例的过程
- spring学习(五)ClassPathXmlApplicationContext的getBean获取实例bean
- Spring 获取 实现某接口的所有实例bean
- Spring 关于bean的获取以及自定义注解的起始注入和获取
- Spring框架中获取Bean实例
- POJ 3468 A Simple Problem with Integers (树状数组成段更新)
- 昨天偷懒了(⊙o⊙),好气啊,那今天就补上昨天的吧,orz向大佬们低头。还是熟悉的味道。
- Java 9 Data Structures and Algorithms.pdf
- C++:引用
- undefined
- 获取Spring加载的实例bean/获取注解Beam
- 一个简单的关于字符串识别与转换的程序
- springboot
- POJ 2828 Buy Tickets (线段树)
- Redis实现高并发下的抢购、秒杀功能
- J
- C/C++中默认参数在哪指定?函数声明还是定义?默认参数需放在右边
- Django 如何使用logging打印日志
- 基于enc28j60的学习心得