NullPointerException получение имени класса бина в методе @Produces
У меня есть это LoggerProducer
класс, который вводится в @Stateless
bean для создания записей журнала, как описано здесь.
Проблема в том, что когда CustomerBean
вызывается (даже без вызова logger.info
), @Produces
метод (который получает имя класса компонента) завершается неудачно с NullPointerException
, Что не так с этим кодом?
@Named
@Singleton
public class LoggerProducer {
@Produces
public Logger produceLogger(InjectionPoint injectionPoint) {
return LoggerFactory.getLogger(
injectionPoint.getBean().getBeanClass()); // <- error here
}
}
Бин, который внедряет логгер:
import org.slf4j.Logger;
@Stateless
@LocalBean
@Named
public class CustomerBean {
@Inject
private Logger logger;
......
logger.info("some message");
1 ответ
Решение
При условии, что injectionPoint
не является нулевым (в вашем методе продюсера), вы можете попробовать это:
@Produces
Logger createLogger(InjectionPoint injectionPoint) {
return LoggerFactory.getLogger( injectionPoint.getMember().getDeclaringClass().getName() );
}