如何通过 Spring 注解将它们连接在一起
我有一个 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 需要在其构造函数中添加附加参数。
抱歉冗长的解释,并提前感谢您的提示。
CS
I got a web application, and I have to wire it's components (A,B,C) together instead of direct method calls.
So, I dont know how can I wire object instances together when they need additional instances in the constructor.
I think in thats why the we can use (bean ... constructor-args ...) in application context.
But I dont know what if I want to use annotations.
I made a simple example to demostrate the concrete problem
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;}
}
What is the best way to wiring A,B,(C) together (by annotations) because B, C needs additinal arguments right in their constructor.
Sorry for the lenghty explanation, and thanks for the tips in advance.
Cs
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将自动装配所有参数。如果您需要其他参数 - 那么不要使用构造函数注入。使用设置器/字段注入。提供一个空的构造函数,并在您需要的每个字段上添加
@Autowired
。will autowire all arguments. If you need additional arguments - then don't use constructor injection. Use setter/field injection. Provide an empty constructor and have
@Autowired
on each field that you need.嗯..如果你在启动 B 类时尝试使用 @Resource 。
那么如果你需要在 B 或 CI 中进行 Autowire 就很难说了。
Hmm.. if you try with @Resource when initiating the B-class.
Then if you need to Autowire in B or C I find hard to tell.