Nano Hash - криптовалюты, майнинг, программирование

Использование @Interceptor в @ManagedBean

Перехват с CDI отлично работает в @Named , но не в @ManagedBean:

Logable.java

@InterceptorBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Logable {

}

LoggingInterceptor.java

@Logable
@Interceptor
public class LoggingInterceptor {
@AroundInvoke
    public Object log(InvocationContext ctx) throws Exception {
//log smth. with ctx.
}
}

WorkingBean.java

@Named
@Logable
public class WorkingBean implements Serializable {
 //works : methods will be logged
}

beans.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">

<interceptors>
 <class>LoggingInterceptor</class>
</interceptors>

</beans>

ViewScopedBean.java

@Logable
@ManagedBean
public class ViewScopedBean implements Serializable {
 //doesn't work
}

Я знаю, что этот тип Interceptor предназначен для работы с WebBeans (и EJB), но я ищу решение для обоих миров (описанных + JSF) с той же концепцией Interceptor, которая мне нужна @ ViewScoped @ManagedBean, вот почему я не могу избавиться от @ManagedBean в пользу чистых WebBeans

Система: Mojarra 2.1.7 Primefaces 3.2


Ответы:


1

Насколько я понимаю, его нет. JSF не поддерживает перехват.

28.06.2012
  • довольно неудовлетворительно... вероятно, это это некрасивый путь 29.06.2012
  • Это некрасиво! Первоначально JSF был создан до того, как появился АОП. Это просто не то, о чем думали. Кроме того, теперь у вас есть перехватчики CDI и EJB, так что в этом нет смысла. JSF 2.2 позволит вам делать перехватчики CDI. 30.06.2012

  • 2

    JSF не поддерживает перехват CDI, как вы опубликовали как таковой. Перехватчик CDI будет работать для таких методов жизненного цикла, как @PostConstruct

        @Inherited
        @InterceptorBinding
        @Retention(RUNTIME)
        @Target({TYPE})
        public @interface TypeLogger {
    
          @Nonbinding
          public LoggingLevel logLevel() default LoggingLevel.INFO;
        }
    

    Вот как его можно было бы использовать, поскольку он привязывается только к @Target({TYPE})

        @ManagedBean
        @ViewScoped
        @TypeLogger
        public class Index implements Serializable {
    
           private static final long serialVersionUID = 3336392241545517919L;
    
           @PostConstruct
           private void init() {
             setup();
           }
        }
    
    21.11.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..