Внедрение зависимости во время выполнения с Spring

Как Wedge сказал , Вы хотите умножиться для создания вещей более яркими, но который только работает, пока один из цветов не становится влажным (т.е. совершает нападки 255 или больше). В той точке можно просто зафиксировать значения к 255, но Вы будете тонко изменять оттенок, поскольку Вы становитесь легче. Для хранения оттенка Вы хотите поддержать отношение (среднего самого низкого) / (самый высокий самый низкий).

Вот две функции в Python. Первые реализации наивный подход, который просто фиксирует значения RGB к 255, если они переходят. Второе перераспределяет избыточные значения для сохранения оттенка в целости.

def clamp_rgb(r, g, b):
    return min(255, int(r)), min(255, int(g)), min(255, int(b))

def redistribute_rgb(r, g, b):
    threshold = 255.999
    m = max(r, g, b)
    if m <= threshold:
        return int(r), int(g), int(b)
    total = r + g + b
    if total >= 3 * threshold:
        return int(threshold), int(threshold), int(threshold)
    x = (3 * threshold - total) / (3 * m - total)
    gray = threshold - x * m
    return int(gray + x * r), int(gray + x * g), int(gray + x * b)

я создал градиент, запускающийся со значения RGB (224,128,0) и умножающий его на 1,0, 1.1, 1.2, и т.д. до 2,0. Верхняя половина является результатом с помощью clamp_rgb, и нижняя половина является результатом с redistribute_rgb. Я думаю, что легко видеть, что перераспределение переполнения дает намного лучший результат, не имея необходимость оставлять цветовое пространство RGB.

Lightness gradient with clamping (top) and redistribution (bottom)

Для сравнения, вот тот же градиент в HLS и цветовых пространствах HSV, как реализовано модулем Python colorsys . Только L компонент был изменен, и фиксация была выполнена на получающихся значениях RGB. Результаты подобны, но требуют преобразований цветового пространства для каждого пикселя.

Lightness gradient with HLS (top) and HSV (bottom)

11
задан skaffman 17 September 2009 в 16:43
поделиться

3 ответа

Я предлагаю вам прочитать раздел в документации Spring, касающийся Использование AspectJ для внедрения зависимых объектов домена с помощью Spring .

Интересно, что вы сказали: «Я мог бы использовать АОП чтобы внедрить зависимости, но тогда я не использую инфраструктуру Spring, "учитывая, что АОП является основной частью инфраструктуры Spring. Они очень хорошо сочетаются друг с другом.

Вышеупомянутая ссылка позволяет вам прозрачно внедрять зависимости AOP Spring в объекты домена, которые создаются без прямой ссылки на инфраструктуру Spring (например, с использованием оператора new ). Это очень умно, но требует серьезной работы с загрузкой классов.

10
ответ дан 3 December 2019 в 07:13
поделиться

Внедрение / конфигурация зависимостей Spring предназначена только для настройки низкоуровневой технической инфраструктуры, такой как источники данных, управление транзакциями, удаленное взаимодействие, точки монтирования сервлетов и т. Д.

Вы используете spring. для маршрутизации между техническими API и вашими сервисами, а внутри этих сервисов вы просто пишете обычный Java-код. Держать Spring подальше от вашей модели предметной области и реализаций служб - это хорошо. Для начала, вы не хотите связывать бизнес-логику вашего приложения с одной структурой или позволять техническим проблемам низкого уровня «просачиваться» в модель предметной области вашего приложения. Код Java намного легче изменить в среде IDE, чем конфигурацию XML Spring, поэтому сохранение бизнес-логики в java позволяет вам быстрее предоставлять новые функции и легче поддерживать приложение. Java намного более выразительна, чем формат XML Spring, поэтому вы можете более четко моделировать концепции предметной области, если будете придерживаться простой Java.

5
ответ дан 3 December 2019 в 07:13
поделиться

Внедрение зависимостей Spring (и внедрение зависимостей в целом) в основном предназначено для объединения сервисов, репозиториев и фабрик и т. Д. Оно не должно напрямую обрабатывать вещи, которые должны выполняться динамически в ответ на команды. и т. д., который включает в себя большинство вещей с объектами домена. Вместо этого он обеспечивает контроль над тем, как эти вещи выполняются, позволяя вам подключать объекты, которые вы хотите использовать для их выполнения.

2
ответ дан 3 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: