Вы действительно хотите autowire переменные? Или вы хотите четко определить их при получении компонента?
В последнем случае, вы можете просто позвонить ApplicationContext.getBean(Class<T> clz, Object ... arguments)
, в вашем случае ...
Person person = context.getBean(Person.class, "Henry", "Miller");
Очевидно, что не имеет ничего общего с @Autowired
. Или вы хотите автоувеличивать некоторые строки? В этом случае вы обычно используете аннотацию @Value
. Autowired используется для введения бобы, которые вы можете сделать с помощью инъекции поля ...
@Autowired
private MyService service;
... с помощью инъекции конструктора ...
@Autowired
public Person(MyService service) { ... }
... через сеттер инъекции .. .
@Autowired
public void setMyService(MyService service) {..}
но обычно только autowire бобы этак. Струны нет бобов, так что вы должны использовать @Value
...
@Autowired
public Person(@Value('${app.some.property}') final String firstName) {...}
Это впрыснуть настроенное свойство app.some.property в этом компоненте. Конечно, это только хорошо, если вы действительно хотите что-то привнести из контекста приложения. Если вы хотите динамически создать Person, вы можете использовать метод выше.
Простыми словами, я хочу создать объект класса person с 2 строковыми свойствами, когда это требуется. В java мы можем сделать это с помощью новых, но хотим, чтобы не использовать способ создания с использованием Spring. @Autowired работает хорошо без конструктора аргументов, но как он работает с конструктором с аргументами. – Atul
Обновлен ответ. –