После настройки bean-компонента в XML, как создать экземпляр объекта? - PullRequest
1 голос
/ 26 января 2010

Как вы подключили bean-компонент в XML-файл, как создать экземпляр объекта?

Это так же, как:

Myobject myObject = new MyObject();

А пружина под чехлами будет выполнять поиск по типу?

Или вам нужно использовать applicationContext?

Ответы [ 5 ]

2 голосов
/ 26 января 2010

Я считаю, что это то, что вы ищете -> http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-client

По существу, это сводится к методу getBean():

MyObject obj = (MyObject) ctx.getBean("myObject");

Конечно, в веб-контексте или в какой-либо другой среде вы можете получить ctx (весенний контекст) из другого места, поэтому вам не нужно создавать его вручную.

0 голосов
/ 26 января 2010

То, как вы это описали, не сработает. Spring не изменит способ создания нормальных объектов. Чтобы использовать инъекцию Spring, т. Е. Получить ссылку на bean-компонент Spring, вы можете:

  • получить бин из объекта контекста приложения по имени
  • пусть Spring выполнит свою работу с аннотациями @Autowired или с автозапуском :):
  • явно настраивать инъекции в xml

В общем, чтобы получить боб, вы не должны его создавать, но просите Spring доставить его вам.

0 голосов
/ 26 января 2010

Магия внедрения зависимости заключается в том, что вам не нужно искать ссылку, хотя вы можете сделать это программно.

<bean name="myObject" class="x.y.MyObject"/>

<bean name="anotherObject" class="x.y.Foo">
  <property name="myObjectProperty" ref="myObject"/>
</bean>

Кроме того, вы можете определить, должен ли объект быть 'singleton' или прототипом (один экземпляр для каждого запроса).

Я надеюсь, что это поможет вам

0 голосов
/ 26 января 2010

Вы также можете получить объект, получив контекст приложения и вызвав getBean:

ApplicationContext appContext =
  WebApplicationContextUtils.getRequiredWebApplicationContext( servletContext );
return appContext.getBean( beanName );

Вы можете получить свой контекст сервлета, реализовав ServletContextAware и создав правильный установщик в своем коде.

0 голосов
/ 26 января 2010

Когда ваш сервер приложений запускается, Spring выполнит инстанцирование для вас. И также «внедрит» объект в ваш класс.

Таким образом, для того, чтобы внедрение произошло, вы должны либо написать метод установки (который Spring будет вызывать после создания объекта)

public class MyClass{
    private MyObject myObject;

    public void setMyObject(MyObject _myObject){  //Spring will call this method
    this.myObject = _myObject;
    }
}

или вы можете использовать инъекцию на основе конструктора

public class MyClass{
    private MyObject myObject;

    public MyClass(MyObject _myObject){  //Spring will call this constructor
         this.myObject = _myObject
    }
}

EDIT: Спасибо за указание на это Питер D

В вашем XML-файле конфигурации вам нужно будет сделать что-то вроде:

<bean name="myObject" class="mypackage.MyObject"/>

<bean name="myClass" class="mypackage.MyClass">
  <property name="myObject" ref="myObject"/>
</bean>

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...