2015-07-02 2 views
0

предположить, у меня есть этот классПолучить боб с конкретными аргументами конструктору весной

public Student{ 
private String name; 
private Address address; 

public Student(String fName, Address address){ 
    name = fname; 
    this.address = address; 
} 

я определил этот класс в конфигурации Spring, как

<bean name="studentInstance" class="StackOverFlow.Student"/> 

теперь я хотел бы использовать getBean с параметром I перейдет к конструктору. , равный Student s = new Student(name,address) Я знаю, что Spring поставляет metond getBean (class_name, parms ....) Однако я не знаю, как настроить конфигурационный файл Spring.xml. Я хотел бы избежать использования Setter и getter, чтобы заполнить новый bean-компонент.

Я нашел много примеров того, как определить </constructor-arg> внутри xml, но каждый раз, когда он был со значениями по умолчанию. здесь я позволяю пользователю вводить разные значения для каждого объекта. Я хотел бы использовать ApplicationContext context = new ClassPathXmlApplicationContext(Spring.xml file path); Student s= (Student)context.getBean("studentInstance",name,address);

мне нужна помощь с файлом конфигурации только

Заранее спасибо !!

Я уже проверил эти ссылки: Link1Link2Link3Link4

~~~~~ Edit ~~~~~~~

Решено! конструктор-инъекция здесь не требуется. Я просто добавил область прототипа в свой компонент, как показано ниже.

<bean name="carInstance" class="MainApp.bl.GasStation.Car" scope="prototype"/> 
+1

Сторона примечания, Spring создает Singleton из бобов по умолчанию. Если вам нужно больше экземпляров, сначала вам нужно будет объявить свой bean-прототип в качестве прототипа. – John

+0

Ничего себе !! Я просто добавил scope = "prototype" в свой bean-компонент, и все работало как магия !!! Почему это нигде не упоминается или не отображается! tnx brother! – Tamir1989

+0

Если это вам помогло, вы можете принять ответ, нажав на серый флажок :) – John

ответ

0

Во-первых, такой компонент, очевидно, должен быть объявлен прототипом.

Прототип ограничивает определение одного компонента, чтобы иметь любое количество экземпляров объектов. Если Прицел установлен на прототип, контейнер Spring IoC создает новый Bean экземпляр объекта каждый раз, когда запрос для конкретного боба сделан <

Object getBean(String name, Object... args)throws BeansException

возвращает экземпляр, который может быть общий или независимый, указанного компонента. Позволяет указать явные аргументы конструктора/аргументы фабричного метода, переопределяя указанные аргументы по умолчанию (если они есть) в определении компонента.

Обратитесь к следующему вопросу для конфигурации:

Spring <constructor-arg> element must specify a ref or value

Обратите внимание, вам придется обернуть примитивы в свои объекты Wrapper, чтобы избежать предопределенных значений при создании объекта.