Предположим, у нас есть следующий код 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.
2. Сделайте так, чтобы всевозможные слушатели могли регистрироваться в Maintainer через XML с помощью метода addListener . Spring doc и Google очень щедры в примерах.
Есть ли способ достичь этого легко?