假设我们有以下 Java 代码:
public class Maintainer {
private Map<Enum, List<Listener>> map;
public Maintainer() {
this.map = new java.util.ConcurrentHashMap<Enum, List<Listener>>();
}
public void addListener( Listener listener, Enum eventType ) {
List<Listener> listeners;
if( ( listeners = map.get( eventType ) ) == null ) {
listeners = new java.util.concurrent.CopyOnWriteArrayList<Listener>();
map.put( eventType, listeners );
}
listeners.add( listener );
}
}
此代码片段不过是稍微改进的监听器模式,其中每个监听器都告诉它对什么类型的事件感兴趣,并且所提供的方法维护这些关系的并发映射。
最初,我希望通过我自己的注释框架调用此方法,但遇到了各种注释限制的障碍(例如,您不能将 java.lang.Enum 作为注释参数,还有一系列不同的类加载器问题)因此决定使用 Spring。
谁能告诉我如何 Spring_ify_ 这个?我想要实现的是:
1. 将 Maintainer 类定义为 Spring bean。
2. 使各种监听器都可以使用addListener 方法通过XML 将自己注册到Maintainer。 Spring doc 和 Google 在示例方面都非常慷慨。
有没有办法轻松实现这一目标?
最佳答案
像下面这样做会有什么问题:
使用 addListener(Listener, Enum) 方法定义“Maintainer”接口(interface)。
创建一个实现 Maintainer 的 DefaultMaintainer 类(如上)。
然后,在每个 Listener 类中,“注入(inject)”Maintainer 接口(interface)(构造函数注入(inject)可能是一个不错的选择)。然后,监听器可以向维护者注册自己。
除此之外,我并不是 100% 清楚您目前使用 Spring 的困难所在! :)
关于java - Spring 2.5 中枚举映射和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71469/