当使用new运算符创建对象时,如何在spring中注入依赖项?

时间:2012-01-20 09:20:37

标签: java spring java-ee dependency-injection

我有一个CustomerRelation类,它有一个方法getInstance()和一个实例变量,即

private CustomerCrudService relationshipService = null;

关于getInstance方法的简要说明

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

现在我将调试器放在第1行。执行此行后,我看到创建了包含relationshipService的实例 宾语。我的问题是在使用new运算符创建实例时如何注入依赖关系服务?

虽然在MyProject-SpringConfig.xml中我可以看到下面的配置但仍然是我们创建对象时的事件 有了新的操作员,被弹簧核心容器拦截了吗?是因为spring 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 个答案:

答案 0 :(得分:4)

  

当我们使用new运算符创建对象时,事件是如何被spring core容器截获的?

这是因为这一点魔力:

@Configurable

如您所料,这会在运行中使用自定义类加载器(以及加载时AOP编织)到inject dependencies into your domain object

答案 1 :(得分:1)

@Inject@Resourse注释添加到字段声明中。

@Resourse
private ICustomerRelationshipCrudService relationshipService;

启用@Configurable支持

并使用AspectJ