Страницы

Поиск по вопросам

воскресенье, 5 января 2020 г.

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

#java #spring


Пытаюсь освоить 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:





    





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

public class Main {

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

    


Ответы

Ответ 1



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

Комментариев нет:

Отправить комментарий