Инъекция весенних бобовых полей

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

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

И определение боба:

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

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

public class Bean {
    @Property
    private String value;
}

person Vladimir    schedule 04.10.2010    source источник
comment
Я не понял, что ты пытаешься сделать? Вы хотите ввести строку в поле?   -  person Bozho    schedule 04.10.2010
comment
Не совсем. Я хочу представить поле как свойство без написания метода установки.   -  person Vladimir    schedule 04.10.2010
comment
Думаю, это хороший вопрос. Spring MVC может выполнять прямое внедрение полей для объектов команд MVC, поэтому разумно рассмотреть возможность прямого внедрения полей для свойств компонента. Однако я не верю, что это можно сделать весной.   -  person skaffman    schedule 04.10.2010
comment
сеттер нужен, я думаю, зачем вам это нужно?   -  person jmj    schedule 04.10.2010
comment
Я просто хочу заменить кучу общедоступных сеттеров (которые на самом деле являются ненужными методами) простыми аннотациями везде, где это полезно.   -  person Vladimir    schedule 04.10.2010


Ответы (3)


Ты сможешь:

  • используйте аннотацию @Value и введите свойство (используя язык выражений)
  • взгляните на Project Lombok, который позволит вам пропустить все сеттеры и геттеры (и многое другое)
person Bozho    schedule 04.10.2010
comment
Аннотация @Value заменяет IoC на Resource Locator. И для этого требуется определить значение свойства в коде Java. И у меня не могло быть 2 разных экземпляра с разными свойствами. Вот почему я хочу только разоблачения как собственности. - person Vladimir; 04.10.2010
comment
Насчет ломбока — использование этого проекта в моем случае похоже на пистолет на руле. - person Vladimir; 04.10.2010
comment
Ломбок - это путь. Просто аннотируйте свои личные поля с помощью @Setter и все. Нет зависимости во время выполнения, вам просто нужен ломбок во время компиляции, а сгенерированные файлы .class будут иметь методы установки. Единственная проблема заключается в том, что вы хотите аннотировать метод чем-то вроде @Required. - person Chochos; 20.04.2011

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

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

<context:annotation-config/>

Ссылка:

person Sean Patrick Floyd    schedule 04.10.2010
comment
Они не работают для строковых значений, они работают только для внедрения Bean-компонентов. - person Nakedible; 25.03.2011

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

person cyotee doge    schedule 29.03.2014