Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Использование статических методов в ManagedBean


Автор: vogdb 2.8.2010, 15:09
Пишу веб приложение на jsf2. Активно использую @ManagedBean.
Методы общего назначение вынесены в класс Util.
Допустим следующий код
Код

        ELContext context = FacesContext.getCurrentInstance().getELContext();
        ApplicationFactory appFactory = (ApplicationFactory) FactoryFinder.
                    getFactory(FactoryFinder.APPLICATION_FACTORY);
        ValueExpression binding = appFactory.getApplication().getExpressionFactory().
                createValueExpression(context, "#{" + expression + "}", expectedType);
        return binding.getValue(context);

вынесен в метод
Код

        public Object getManagedBean(String expression, Class<?> expectedType)

Обращаюсь с ним так
Код

       Util util = new Util();
       util.getManagedBean(...);

Возник следующий вопрос. Как лучше быть для скорости работы приложения. В каждом бине иметь свой экземпляр класса Util и обращаться к нему через него(условно назовем способ А) или же лучше сделать метод getManagedBean статическим?(условно назовем способ B)
Код

        public static Object getManagedBeanStatic(String expression, Class<?> expectedType)

И из всех бинов напрямую обращаться
Код

Util.getManagedBeanStatic(...);


Или же еще такой вариант. Сделать класс Util ManagedBean'ом и обращаться к нему как-нибудь так(условно назовем способ C)
Код

       //Спрячем само получение бина
       Util util = Util.getInstance();
       //А дальше по накатанной
       util.getManagedBean(...);


Какой способ выбрать A,B или C?

Автор: powerOn 2.8.2010, 21:04
Метод делайте нестатическим, иначе юнит тесты, на код который использует эту утилиту, будет тяжело писать. 

Автор: vogdb 2.8.2010, 22:25
Было бы интересно узнать с точки зрения скорости работы приложения. Какой из методов быстрее?

Автор: ynblpb 3.8.2010, 08:18
Я бы сделал его ManagedBean с видимостью application и проинжектил во все бины, вот так:

Код

     @ManagedProperty(value="#{util}")
    private Util util;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)