10

Использование Spring IoC позволяет установить свойства фасоли подвергаются через сеттеры:Spring боб полей инъекции

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, что позволяет напрямую выставлять бобовые поля как свойства без определения сеттеров? Нечто подобное с тем же определением боба:

public class Bean { 
    @Property 
    private String value; 
} 
+0

Я не понимал, что вы пытаетесь сделать? Вы хотите ввести строку в поле? – Bozho

+0

Не совсем. Я хочу открыть поле как свойство без написания метода сеттера. – Vladimir

+0

Это хороший вопрос, я думаю. Spring MVC может выполнять непосредственную инъекцию поля для объектов команд MVC, поэтому разумно рассматривать прямое впрыскивание полей для свойств bean. Тем не менее, я не верю, что есть какой-то способ сделать это весной. – skaffman

ответ

6

Вы можете:

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

@ Аннотации Value заменяют IoC на Resource Locator. И для этого требуется определить значение свойства в java-коде. И у меня не было двух разных экземпляров с разными свойствами. Вот почему я хочу только разоблачение как собственность. – Vladimir

+1

О lombok - использование этого проекта в моем случае похоже на ружье на руле. – Vladimir

+0

Ломбок - это путь. Просто аннотируйте свои личные поля с помощью @Setter, и все. Нет зависимости от времени выполнения, вам просто нужно lombok во время компиляции, а сгенерированные файлы .class будут иметь методы setter. Единственная проблема заключается в том, когда вы хотите аннотировать метод с помощью чего-то вроде @Required. – Chochos

5

Весна поддерживает анкетирование на основе поля ввода out of the box для th e JSR-250@Resource аннотация. Весна собственная @Autowired и JSR 330's @Injectalso work.

Вам просто нужно add this line to your context.xml:

<context:annotation-config/> 

Ссылка:

+3

Те, кто не работает для значений String, работают только для инъекций Beans. – Nakedible

1

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

Смежные вопросы