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这个接口的所有实现类就会都被调用实现的方法。
//---------------------------------------------------------------------------------------------------------------
/**
* Spring 工具类
*
*/
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;
}
/**
* 根据beanName 获取 spring bean
* @param beanName
* @return Object
*/
public static Object getBean(String beanName){
if(beanName==null)return null;
return applicationContext.getBean(beanName);
}
/**
* 根据bean type 获取springBean
* @param clazz
* @return
*/
public static <T> T getBeanByType(Class<T> clazz){
return applicationContext.getBean(clazz);
}
/**
* 获取 Spring applicationContext
* @return
*/
public static ApplicationContext getContext() {
return applicationContext;
}
}