Как зависимость вводится весной, когда объект создается с новым оператором? - PullRequest
3 голосов
/ 20 января 2012

У меня есть класс CustomerRelation, который имеет метод getInstance() и переменную экземпляра, т.е.

private CustomerCrudService relationshipService = null;

Краткое описание метода getInstance:

 static public CustomerRelation getInstance() {
    if (instance == null) {
      instance = new customerRelation();//line1
     }
 return instance;//line2
   }

Теперь я помещаю отладчик в строку 1. После выполнения этой строки я вижу, что создан экземпляр, содержащий RelationshipService. объект. Мой вопрос заключается в том, как зависимые отношенияService были введены при создании экземпляра с новым оператором?

Хотя в MyProject-SpringConfig.xml я могу видеть ниже конфигурацию, но все же, как событие, когда мы создаем объект с новым оператором, перехватывается ли контейнер с пружинным сердечником? Это из-за весны customclassloader. Если да где мы указываем это?

  <bean class="com.its.portfolio.relationship.CustomerRelation" scope="prototype">
    <property name="relationshipService" ref="relationshipService" />
  </bean>

Редактировать: - Вот код CustomerRelation

    package com.its.relationship;

    import java.util.List;
    import java.util.Map;

    import org.springframework.beans.factory.annotation.Configurable;

    /**
     * accessor for customerrelation meta data
     *
     */
    @Configurable
    public class CustomerRelation implements ICustomerRelation {

      static private CustomerRelation instance;
      private ICustomerRelationshipCrudService relationshipService;

      private CustomerRelation() {
      }

      static public ICustomerRelation getInstance() {
        if (instance == null) {
          instance = new CustomerRelation();
        }
        return instance;
      }

    }

Ответы [ 2 ]

4 голосов
/ 20 января 2012

как событие, когда мы создаем объект с новым оператором, перехватывается контейнером с пружинным ядром?

Это происходит из-за этого волшебства:

@Configurable

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

1 голос
/ 20 января 2012

Поместите аннотацию @Inject или @Resourse к объявлению поля.

@Resourse
private ICustomerRelationshipCrudService relationshipService;

Включите @Configurable Поддержка

И используйте AspectJ

...