获得spring容器中,实现某接口的所有实例;
2016-02-22 10:56
477 查看
从spring容器中,获得实现指定接口的所有实例 @Component public class SpringBeanUtil implements ApplicationContextAware { private Map<String, Object> serviceBeans; @Override public void setApplicationContext(ApplicationContext ac) throws BeansException { //获得所有serviceBeans serviceBeans =ac.getBeansWithAnnotation(org.springframework.stereotype.Service.class); } /** * 从spring容器中获得指定接口实现实例 * 从spring容器中获得实现@service 所有bean中实现 interfaceType接口的实例 * * @param interfaceType 需要和 I.class一样 * @return */ public List<Object> getBeansByInterface(Class<?> interfaceType) { List<Object> tList = new ArrayList<Object>(); for(String key : serviceBeans.keySet()) { Object obj = serviceBeans.get(key); for(Class<?> c : obj.getClass().getInterfaces()) { if(c.getName().equals(interfaceType.getName())) { tList.add(obj); } } } return tList; } } @Component public class SpringBeanUtil implements ApplicationContextAware { private Map<String, Object> serviceBeans; @Override public void setApplicationContext(ApplicationContext ac) throws BeansException { //获得所有serviceBeans serviceBeans =ac.getBeansWithAnnotation(org.springframework.stereotype.Service.class); } /** * 从spring容器中获得指定接口实现实例 * 从spring容器中获得实现@service 所有bean中实现 interfaceType接口的实例 * * @param interfaceType 需要和 I.class一样 * @return */ public List<Object> getBeansByInterface(Class<?> interfaceType) { List<Object> tList = new ArrayList<Object>(); for(String key : serviceBeans.keySet()) { Object obj = serviceBeans.get(key); for(Class<?> c : obj.getClass().getInterfaces()) { if(c.getName().equals(interfaceType.getName())) { tList.add(obj); } } } return tList; }
通过放射调用对象接口方法,从而实现,自动调用实现接口的某方法:例如日终任务: @Service public class DayEndJob { @Autowired private SpringBeanUtil springBeanUtil; List<Object> beans; public void execute() { if (null == beans) { beans = springBeanUtil.getBeansByInterface(IDayEndJob.class); } for (Object obj : beans) { IDayEndJob job = (IDayEndJob)obj; try { job.runDayEndJob(new Date()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
相关文章推荐
- 【Java】J2EE,启航
- JAVA 获取网页流
- java安全——加密
- PAT 1003. 我要通过!(20) java实现
- Java基本类型变量和包装类之间转换
- Spring事务配置的五种方式
- java中abstract详解
- Java 回顾笔记5(上午)_static
- JSON与Java对象转换
- Java [Leetcode 155]Min Stack
- eclipse 常用快捷键
- 深入源码-jetty加载spring-context容器
- java 常见的2种单例模式
- java中Date无法获取数据库时分秒的问题
- java程序实现短信发送(可调用免费短信接口)
- java-web总结--jsp--会话
- 加载properties文件属性的Java工具类实现
- java读取excel文件并写入另一个excel文件
- Eclipse的Jar包解压出System.js里String与Boolean定义分号可有可无吗?
- java的zip解压