Как написать как поэзию как код услуги (с использованием одного аннотаций + + Примером завода удалить большую волна определяется, если и еще)

контроллер 1. Заказы, расчет на основе цен на сырьевые товары скидка товаров ID ID банковские каналы и интерфейсы:

Импорт org.springframework.web.bind.annotation.GetMapping;
 Импорт org.springframework.web.bind.annotation.RequestMapping;
 Импорт org.springframework.web.bind.annotation.ResponseBody;
 Импорт org.springframework.web.bind.annotation. RestController; 

Импорт java.math.BigDecimal; 

@RestController 
@ RequestMapping ( "/ Приказ" )
 общественный  класс {OrderController 

    / ** 
     сумма * после скидка рассчитываются в соответствии с идентификатором товарных и банковские каналы ид 
     * 
     * @param goodsId ID продукта 
     * @param channelId канал банк выше идентификатор 
     * @return 
     * /
    @GetMapping ( "/ известково" ) 
    @ResponseBody 
    общественности Строка calcAmount (Integer goodsId, Integer channelId) { 
        контекст Context = новый контекст (); 
        BigDecimal BigDecimal; 
        попробовать { 
            BigDecimal = context.calRecharge (goodsId, channelId); 
        } Задвижка (Исключение е) { 
            e.printStackTrace (); 
            вернуться «» ; 
        } 
        Вернуть bigDecimal.setScale (2) + " " ; 
    } 
}

 

2. Контекст:

Импорт java.math.BigDecimal, 

общественный  класс {Context 

    / ** 
     Сумма * после скидки рассчитывается в соответствии с идентификатором товарные и банковские каналы ид 
     * 
     * @param goodsId ID продукта 
     * @param channelId банковские каналы идентификатор 
     * @return 
     * @throws Exception
      * / 
    общественного BigDecimal calRecharge (goodsId Integer, Integer channelId есть) бросает исключение { 
        strategyFactory strategyFactory = StrategyFactory.getInstance ();
         // запрос идентификатор канала конкретный класс реализации банка 
        Стратегия Стратегия = strategyFactory.create (channelId есть);
        // позвонить в определенной категории рассчитывается 
        возврат strategy.calRecharge (goodsId, channelId есть); 
    } 
}

 

Пример 3. Дисконтная блок вычисления фабрики класса, внутренняя реализация класса с отображением между банком каналов для хранения карты и конкретного банка ид, банк для облегчения доступа к соответствующему каналу в соответствии с определенным отражением категории ID:

импорт org.reflections.Reflections; 

импорт java.util.HashMap;
импорт java.util.Set; 

общественный  класс StrategyFactory {
     частный  статический StrategyFactory strategyFactory = новый StrategyFactory (); 

    частный StrategyFactory () { 
    } 

    общественного  статического StrategyFactory деЫпзЬапс () {
         вернуться strategyFactory; 
    } 

    Частный  статический HashMap <Integer, String> source_map = новый HashMap <> (); 

    статические { 
        Отражения отражений = новыйРазмышления ( "ICBCBankImpl" ); 
        Набор <класс <>> classSet = reflections.getTypesAnnotatedWith (Платежной.? Класс );
         для (класс <>? Clazz: classSet) { 
            Платят Платят = clazz.getAnnotation (. ОПЛАТА класс ); 
            source_map. PUT (pay.channelId (), clazz.getCanonicalName ()); 
        } 
    } 

    / ** 
     * получить конкретный банк класса реализации банковские каналы из карт ID 
     * 
     * @param channelId является 
     * @return 
     * @throws Exception
      * / 
    общественной стратегии Создать ( INT channelId)бросает исключение { 
        Строка clazz = source_map.get (channelId); 
        Класс clazz_ = <?> Class.forName (clazz);
        вернуться (Стратегия) clazz_.newInstance (); 
    } 
}

 

4. После расчета дисконтной цены интерфейса:

импорт java.math.BigDecimal; 

публичный  интерфейс Стратегия { 
    BigDecimal calRecharge (Integer goodsId, Integer channelId); 
}

 

5. ICBC класса реализации, класс заметка на плюс @Pay идентификатора канала указывается ICBC соответствующей базы данных:

Импорт javax.annotation.Resource;
 Импорт java.math.BigDecimal; 

/ ** 
 * Коммерческий банк класс реализации, базы данных идентификатор канала , соответствующий 1. 
 * / 
@Pay (channelId есть = 1. )
 Общественный  класс ICBCBankImpl инвентарь Стратегия { 

    @Resource 
    Private goodsMapper goodsMapper; 

    @Resource 
    Private channelMapper channelMapper; 

    / ** 
     * цена после скидки рассчитывается в зависимости от товара и банковские каналы ид ид 
     * 
     * @param goodsId продукт ID 
     * @param channelId банковских каналов ID 
     * @return 
     * / 
    @Override 
    общественногоBigDecimal calRecharge (целое число goodsId, Целое channelId) { 
        BigDecimal goodsPrice = goodsMapper.getGoodsPriceById (goodsId); 
        BigDecimal discountPrice = channelMapper.getDiscountPriceById (channelId);
        если (goodsPrice == NULL || discountPrice == NULL ) {
             возвращение  нуль ; 
        } 
        Вернуть goodsPrice.multiply (discountPrice); 
    } 
}

 

6. Банк знак для аннотирования класса реализации определяет атрибут банковских каналов ID:

импорт java.lang.annotation.ElementType;
импорт java.lang.annotation.Retention;
импорт java.lang.annotation.RetentionPolicy;
импорт java.lang.annotation.Target; 

@Target (ElementType.TYPE) 
@Retention (RetentionPolicy.RUNTIME) 
общественного @ интерфейс Pay {
     INT channelId (); 
}

 

7. проверка моделирования цены Dao:

импорт java.math.BigDecimal; 

общественный  класс GoodsMapper {
     общественного BigDecimal getGoodsPriceById (Integer goodsId) {
         вернуться BigDecimal.valueOf (599 ); 
    } 
}

 

8. Аналоговый запрос канала запроса скидка Dao:

импорт java.math.BigDecimal; 

общественный  класс ChannelMapper {
     общественного BigDecimal getDiscountPriceById (Integer channelId) {
         вернуться BigDecimal.valueOf (0,5 ); 
    } 
}

 

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

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