java - Spring 2.5 中枚举映射和依赖注入(inject)

标签 java spring enums maps

假设我们有以下 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/

相关文章:

java - 在独立应用程序中使用@Transactional

java - Freemarker:如何使用枚举作为键来遍历 map

c++ - 在 C++ 中将 int 转换为枚举的通用方法

java - throw new exception inside a catch 是如何工作的?

java - 何时使用 SOAPBinding.ParameterStyle.BARE 和 SOAPBinding.ParameterStyle.WRAPPED

javascript - 应用程序的脚本安全搜索框

java - 将 java JTable 的多个部分打印到单个页面

java - NoSuchBeanDefinition异常 : No qualifying bean of type [Repository] found for dependency: expected at least 1 bean which qualifies as autowire

java - Maven 将 applicationContext.xml 从 src/main/resources 复制到 target/myproject/WEB-INF

enums - Kotlin ENUM 类具有由委托(delegate)实现的通用接口(interface)