天天看点

spring 调用一个接口的所有实现类的方法

1.定义接口(其实定义接口就是一个标记作用)

public interface ITeleCommunicatinService {

public void dealYaoXin(TeleCommunicating tc);

}

2.通过ApplicationContext  获取到所有的实现了这个接口的方法 然后调用所有

public void dealReferenceService(TeleCommunicating tc){

ApplicationContext ac = SpringUtil.getContext();

Map<String, ITeleCommunicatinService> result = ac.getBeansOfType(ITeleCommunicatinService.class);

if(null != result && !result.isEmpty()){

for(Map.Entry<String, ITeleCommunicatinService> entry:result.entrySet()){

// System.out.println(entry.getKey());//默认是类名(不带报名)

// System.out.println(entry.getValue().getClass());//类的全名输出

try {

ITeleCommunicatinService it = SpringUtil.getBeanByType(entry.getValue().getClass());

it.dealYaoXin(tc);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

3.当这个dealReferenceService被调用时 ,ITeleCommunicatinService这个接口的所有实现类就会都被调用实现的方法。

//---------------------------------------------------------------------------------------------------------------

public class SpringUtil  implements ApplicationContextAware {

private static ApplicationContext applicationContext;

public SpringUtil() {

}

@SuppressWarnings("static-access")

@Override

public void setApplicationContext(ApplicationContext context) throws BeansException {

this.applicationContext=context;

}

public static  Object getBean(String beanName){

if(beanName==null)return null;

    return applicationContext.getBean(beanName);

}

public static <T> T getBeanByType(Class<T> clazz){

return applicationContext.getBean(clazz);

}

public static ApplicationContext getContext() {

return applicationContext;

}

}