如何通过Spring注释将它们连接在一起

时间:2011-09-19 08:56:49

标签: spring annotations autowired

我有一个Web应用程序,我必须将它的组件(A,B,C)连接在一起而不是直接方法调用。

所以,我不知道如果在构造函数中需要其他实例,我如何将对象实例连接在一起。

我认为为什么我们可以在应用程序上下文中使用(bean ... constructor-args ...)。 但我不知道如果我想使用注释会怎样。

我举了一个简单的例子来说明具体的问题

class A
{
   protected B b;
   ...  
   public func1(){
   obj0 = makeObj0();
   b = new B(obj0)
   }

   public Obj0 makeObj0() {...}         
}

class B extends C
{
  protected Obj0 obj0;

  public B(Obj0 obj0){

   super(obj0, "foo", new Obj1); //there is no another way to construct B, C 
       setObj0(obj0);
  } 

  public void setObj0(obj){ obj0=obj;}
}

将A,B,(C)连接在一起(通过注释)的最佳方法是什么,因为B,C在构造函数中需要附加参数。

对于长篇解释感到抱歉,并提前感谢您的提示。

2 个答案:

答案 0 :(得分:1)

@Autowired
public B(..) {..}

将自动装配所有参数。如果您需要其他参数 - 那么不要使用构造函数注入。使用setter / field injection。提供一个空构造函数,并在您需要的每个字段上使用@Autowired

答案 1 :(得分:1)

嗯......如果你在启动B级时尝试使用@Resource。

    class A
{
   @Resource(name = "b")
   protected B b;
   ...  
   public func1(){
   obj0 = makeObj0();
   b = new B(obj0)
   }

   public Obj0 makeObj0() {...}         
}

然后,如果您需要在B或C中使用Autowire,我很难说。