Spring bean поля ввода

Использование Spring IoC позволяет устанавливать свойства bean, выставленные через сеттеры:

public class Bean {
    private String value;
    public void setValue(String value) {
        this.value = value;
    }
}

И определение bean:

<bean class="Bean">
    <property name="value" value="Hello!">
</bean>

Существуют ли существующие плагины/классы для Spring Framework, которые позволяют напрямую выставлять поля bean как свойства без определения сеттеров? Что-то вроде этого с тем же определением bean:

public class Bean {
    @Property
    private String value;
}

Ответ 1

Вы можете:

  • используйте аннотацию @Value и введите свойство (используя язык выражения)
  • посмотрите Project Lombok, который позволит вам пропустить все сеттеры и геттеры (и многое другое)

Ответ 2

Spring поддерживает вставку на основе аннотаций из коробки для JSR-250 @Resource аннотация. Spring собственный @Autowired и JSR 330 @Inject также работают.

Вам просто нужно добавьте эту строку в свой контекст .xml:

<context:annotation-config/>

Справка:

Ответ 3

То, что вы просите, невозможно. Spring подписывается на стандартную конфигурацию. Поэтому он ожидает, что там будут сеттеры и геттеры. Хотя возможна прямая инъекция в поле с помощью Spring; и Spring использует Reflection для достижения этого, Spring не предусматривает обратного этого процесса, чтобы использовать Reflection для доступа к полям без сеттеров или геттеров. Даже Spring реализация AOP предполагает найти методы для структурирования его прокси.