代码的结构如下:public class MainProcessor{    private void doProcess(){ service1.doSomething();
service2.doSomething();
........
serviceN.doSomthing();
    }现在spring的实现是用注解,现在想达到的效果是:添加了serviceN 这个类,实现了doSomthing的方法,MainProcessor能调用到.
如何在不修改 MainProcessor.java代码的情况下 能让 serviceN这个类动态注册上去调用?
MainProcessor 如何在运行的时候找出所有注册的service,spring里面对这种情况有什么好的处理机制?

解决方案 »

  1.   

    首先你这样设计就有问题,service1...serviceN这样注入就需要有N个属性,这样注入的时候就配置N个bean,如果用spring来实现比较困难,你这个需求是典型的 责任链模式 你可以看看这个设计默认的实现方案。
      

  2.   

    不同意楼上的观点,这个问题没什么难度,设计上通过IOC容器完全可以让具体服务和MainProcessor解耦。首先定义service一个接口,该接口定义了doSomething方法。
    所有的具体服务实现这个接口,再都丢到spring的IOC容器中。
    Spring默认的IOC容器就继承了ListableBeanFactory接口的,可以直接使用getBeansOfType(Class<T> type)方法,获得所有service接口的bean对象,也就是你的那些具体服务,然后循环调用doSomething方法就可以了。