Бобы Spring автоброска

Возможно, можно создать плагин для браузера для решения подобных задач. OAuth-сервер может ассоциировать токен с идентификатором сеанса на стороне сервера (вероятно, хранить его в дБ). Когда запрос с токеном oauth получен, сервер проверяет, находится ли тот же токен в сеансе.

6
задан James McMahon 8 May 2009 в 17:32
поделиться

6 ответов

Я согласен с Sii, вам следует избегать как можно большего количества вызовов getBean. Просто подключите ваши bean-компоненты к классам, которые зависят от них.

Тем не менее, если у вас есть один класс, содержащий контекст приложения, вы можете предоставить универсальный метод-обертку, подобный следующему:

class MyContextHolder{
    ApplicationContext appContext;
    ......
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String beanName)
    {
        return (T)appContext.getBean(beanName);
    }
}

Затем вы можете вызывать его без приведения

MyClass mc = MyContextHolder.getBean("myClassBean");
11
ответ дан 8 December 2019 в 14:47
поделиться

Другой подход, который я также использую, - это автоматическое связывание класса начальной загрузки с использованием:

public class Main {
    @Autowired FooFacade foo;
    @Autowired BarFacade bar;

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("appCtx.xml");
        AutowireCapableBeanFactory bf = ctx.getAutowireCapableBeanFactory();
        Object main = bf.createBean(Main.class, 
                                    AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT,
                                    false);
        ((Main) main).run();
    }

    private void run() {
        foo.doBootstrapStuff();
        bar.doMoreBootstrapStuff();
    }
}

(Код сделан из памяти. Может работать, только если у вас настроен контекст Spring для обработки аннотаций проводки, в этом случае создание сеттеры для foo и bar должны работать.)

1
ответ дан 8 December 2019 в 14:47
поделиться

Основной причиной того, что getBean нетипизирован, является совместимость Spring (до версии 2.5.x) с Java 1.4. Spring 3.0 откажется от этого и, следовательно, предложит типизированный метод getBean .

Тем не менее, вам следует избегать прямого поиска bean-компонентов и минимизировать его использование, насколько это возможно.

1
ответ дан 8 December 2019 в 14:47
поделиться

. Ответ заключается в том, что вы вообще не должны использовать ApplicationContext.getBean (), если он ' Это возможно, и имейте в виду то место, которое вам нужно в коде начальной загрузки. (Как правило, вам никогда не нужно использовать getBean () вне точек входа вашего приложения.)

Кроме того, то, что вы спрашиваете, вероятно, вообще невозможно в языке Java. Приведение является функцией времени компиляции в сочетании с проверкой во время выполнения. Тип возврата getBean () просто должен быть известен во время компиляции. Даже если Spring может определить тип объекта, он не может изменять собственные сигнатуры методов во время выполнения.

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

и имейте в виду то место, которое вам нужно в коде начальной загрузки. (Как правило, вам никогда не нужно использовать getBean () вне точек входа вашего приложения.)

Кроме того, то, что вы спрашиваете, вероятно, вообще невозможно в языке Java. Приведение является функцией времени компиляции в сочетании с проверкой во время выполнения. Тип возврата getBean () просто должен быть известен во время компиляции. Даже если Spring может определить тип объекта, он не может изменять собственные сигнатуры методов во время выполнения.

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

и имейте в виду то место, которое вам нужно в коде начальной загрузки. (Как правило, вам никогда не нужно использовать getBean () вне точек входа вашего приложения.)

Кроме того, то, что вы спрашиваете, вероятно, вообще невозможно в языке Java. Приведение является функцией времени компиляции в сочетании с проверкой во время выполнения. Тип возврата getBean () просто должен быть известен во время компиляции. Даже если Spring может определить тип объекта, он не может изменять собственные сигнатуры методов во время выполнения.

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

вам никогда не нужно использовать getBean () вне точек входа вашего приложения.)

Кроме того, то, что вы спрашиваете, вероятно, вообще невозможно на языке Java. Приведение является функцией времени компиляции в сочетании с проверкой во время выполнения. Тип возврата getBean () просто должен быть известен во время компиляции. Даже если Spring может определить тип объекта, он не может изменять собственные сигнатуры методов во время выполнения.

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

вам никогда не нужно использовать getBean () вне точек входа вашего приложения.)

Кроме того, то, что вы спрашиваете, вероятно, вообще невозможно на языке Java. Приведение является функцией времени компиляции в сочетании с проверкой во время выполнения. Тип возврата getBean () просто должен быть известен во время компиляции. Даже если Spring может определить тип объекта, он не может изменять собственные сигнатуры методов во время выполнения.

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

Переспросить, вероятно, вообще невозможно на языке Java. Приведение является функцией времени компиляции в сочетании с проверкой во время выполнения. Тип возврата getBean () просто должен быть известен во время компиляции. Даже если Spring может определить тип объекта, он не может изменять собственные сигнатуры методов во время выполнения.

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

Переспросить, вероятно, вообще невозможно на языке Java. Приведение является функцией времени компиляции в сочетании с проверкой во время выполнения. Тип возврата getBean () просто должен быть известен во время компиляции. Даже если Spring может определить тип объекта, он не может изменять собственные сигнатуры методов во время выполнения.

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

• изменить собственные сигнатуры методов во время выполнения.

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

• изменить собственные сигнатуры методов во время выполнения.

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

4
ответ дан 8 December 2019 в 14:47
поделиться

Что делать, если я использую Spring в качестве фабрики объектов, которую мое приложение широко использует. То есть, вместо того, чтобы писать кучу классов, которые уже наследуют или оборачивают известные классы Java, я просто решил переместить все это в файл xml, чтобы сократить строки кода Java. Это будет означать много строк xml, но мне не нужно делать скелетные классы Java, которые я ввожу с помощью Spring или autowire. Таким образом, линии кода Java меньше.

По этой причине и по-прежнему, поскольку я новичок в Spring, я точно так же, как указано в предыдущем В сообщениях использовались статические методы Java, которые оборачиваются вокруг getBeans ().

Я работал со Spring, но он все еще нов для меня, так что простите мой вопрос.

0
ответ дан 8 December 2019 в 14:47
поделиться

«Поскольку Spring AOP реализован с использованием динамических прокси, вы почти всегда хотите, чтобы Spring передавал вам экземпляр интерфейса, который реализует компонент (который может быть прокси AOP), а не класса реализации. "

Таким образом, невозможно получить динамический прокси-сервер с помощью getBean (), тогда что лучше всего, если нет интерфейсов и должен выполняться отдельный класс драйвера?

-1
ответ дан 8 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

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