Не выводится текст из spring bean

163
22 марта 2019, 23:10

Пытаюсь освоить Spring. Делаю все по видео Spring Потрошитель, но на экран ничего не выходит. Вроде бин класса InjectRandomIntAnnotationBeanPostProcessor просто игнорируется.

Просьба подсказать в чем проблема?

Сам бин:

public class TerminatorQuoter implements Quoter {
private String message;
@InjectRandomInt(min = 2, max = 7)
private int repeat;
public void setMessage(String message) {
    this.message = message;
}
public void sayQuote() {
    for (int i = 0; i < repeat; i++) {
        System.out.println("message = s" + message);
    }
}

Аннотация:

@Retention(RetentionPolicy.RUNTIME)
public @interface InjectRandomInt {
int min();
int max();
}

BeanPostProcessor:

public class InjectRandomIntAnnotationBeanPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    Field[] fields = bean.getClass().getFields();
    for (Field field : fields) {
        InjectRandomInt injectRandomInt = field.getAnnotation(InjectRandomInt.class);
        if (injectRandomInt != null){
            int min = injectRandomInt.min();
            int max = injectRandomInt.max();
            Random random = new Random();
            int randomInt = min + random.nextInt(max - min);
            field.setAccessible(true);
            ReflectionUtils.setField(field, bean, randomInt);
        }
    }
    return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    return bean;
}

XML:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="quoters.InjectRandomIntAnnotationBeanPostProcessor"/>
<bean class="quoters.TerminatorQuoter" id="terminatorQuoter">
    <property name="message" value="I'll be back!!!"/>
</bean>

Main.java (собственно откуда текст и не выходит):

public class Main {
public static void main(String[] args) {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
    context.getBean(TerminatorQuoter.class).sayQuote();
}
Answer 1

Вызов bean.getClass().getFields(); возвращает лишь public поля. Замените этот вызов на bean.getClass().getDeclaredFields();.

READ ALSO
Добавить кнопку перезагрузки

Добавить кнопку перезагрузки

как ??? В игре Добавить кнопку перезагрузки после проигрыша, чтобы кнопка появлялись в JPanel после проигрыша и при нажатии на неё приложение...

179
Как открывать все полученные url в webview?

Как открывать все полученные url в webview?

Есть приложение которое работает с wordpress, контент открывается через webviewИ вот когда я нажимаю на ссылку в webview она открывается во внешнем браузере,...

128
Правильная реализация enum в java

Правильная реализация enum в java

В учебных целях делаю приложение которое собирает строку (банковский счёт) из разных значений согласно этой таблице первые 3 символа счёта...

151
Как правильно обрабатывать RuntimeException?

Как правильно обрабатывать RuntimeException?

Как правильно обрабатывать RuntimeException? Например, у меня есть следующий код:

145