Spring загрузки Как избавиться от если еще?

спрос

Здесь нужен виртуальный бизнес, так что мы легко понять. Предположим, что существует система линия, которая сделана функцией различных видов обработки в соответствии с заказом.

Заказы лицо:

 

 

 сервисные интерфейсы:

 

 

 

Традиционные достижения

Написать кучу заказов в зависимости от типа, если еще:

 

 

 

Реализация шаблона Strategy

Используйте режим стратегии, вам нужно всего лишь две линии для реализации бизнес-логики:

 

 

 

Можно заметить, что описанный выше процесс в HandlerContext, это контекст процессора, процессор, используемый для хранения другого бизнеса, в частности, следующее будет объяснить. Получим абстрактный процессор AbstractHandler, вызывать его методы для реализации бизнес-логики.

Теперь мы можем понять, что наша главная бизнес-логика реализована в процессоре, поэтому количество типов заказов, что соответствует количеству процессоров. После того, как изменения спроса, увеличение типа заказа, необходимо только добавить соответствующий процессор может быть OrderServiceV2Impl полностью без изменений.

Давайте посмотрим на формулировку процессоров трафика:

 

 

 

 

 

 

 

 

 

Во-первых, каждый процессор должен быть добавлен в весеннем контейнер, и поэтому нужно добавить @Component заметки, а затем по необходимости добавления пользовательских аннотаций @HandlerType, который используется для идентификации процессора, соответствующего типу заказа, последний наследуется AbstractHandler, чтобы реализовать свой бизнес-логика.

Пользовательские аннотации @HandlerType:

 

 

 Абстрактный процессор AbstractHandler:

 

Пользовательский обработчик аннотация очень прост и абстрактен, как зарегистрировать процессор контейнера к весне?

Конкретные идеи:

1, сканирует указанный пакет отмечен класс @HandlerType;

2, тип аннотация значение в качестве ключа, как значение, соответствующего категории, сохраненного в карте;

3, как и в карте выше параметр конструктора инициализации HandlerContext, который зарегистрирован в весеннем контейнер;

Мы будем основные функции инкапсулируются в классе HandlerProcessor, завершение вышеуказанных функций.

Обработчик Процессор:

 

 

ClassScaner: исходные инструменты кода сканирования

 

HandlerProcessor необходимо достичь BeanFactoryPostProcessor, весной до обработки бобов, фасоли регистра настроенная на судно.

Ядро было завершено, и теперь посмотрит HandlerContext, как получить соответствующий процессор:

HandlerContext:

 

 

BeanTool: получить боб инструменты

#getInstance метод получения соответствующего класса в соответствии с типом, то пружина, чтобы получить регистрационный класс в соответствии с типом компонента.

Наконец, обратите внимание, что, HandlerProcessor и BeanTool должны быть отсканированы, или путем @Bean явно зарегистрированы для того, чтобы играть роль в начале проекта.

 

резюме

Режим Использование стратегии упрощает комплекс, если еще код, простота в обслуживании, а также использовать пользовательские аннотации и режим самостоятельной регистрации, вы можете легко справиться с требованием перемен. Эта статья дает лишь общее представление о том, есть много деталей, может быть гибкими и изменить, например, перечисляемые тип, статические или постоянные, как тип порядка, я полагаю, вы можете думать о более и более эффективных способах.

 

рекомендация

отwww.cnblogs.com/zhaoyan001/p/11447666.html
рекомендация