【发布时间】:2012-10-05 15:33:25
【问题描述】:
示例
interface IA
{
public void someFunction();
}
@Resource(name="b")
class B implements IA
{
public void someFunction()
{
//busy code block
}
public void someBfunc()
{
//doing b things
}
}
@Resource(name="c")
class C implements IA
{
public void someFunction()
{
//busy code block
}
public void someCfunc()
{
//doing C things
}
}
class MyRunner
{
@Autowire
@Qualifier("b")
IA worker;
worker.someFunction();
}
谁能给我解释一下。
- spring 如何知道使用哪种多态类型。
- 我需要
@Qualifier还是@Resource? - 为什么我们自动装配接口而不是实现的类?
【问题讨论】:
-
你可以自动连接接口,这样你就可以连接一个不同的实现——这是编码到接口而不是类的要点之一。
-
你会在不同的实现中连接;我不明白这个问题。
-
我认为只为一个实现创建接口是一种愚蠢的做法,在 Java 世界中被接受。结果是一堆垃圾代码,但每个人都很高兴他们遵循了 SOLID 和 OOP 的规则。用诡计,把春天扔进历史的垃圾箱。
-
@chrylis-onstrike- 如果我不打算有不同的功能实现,你能否详细说明为什么我不应该直接注入具体类。在我没有预见到将来会有不同的实现的情况下,接口如何提供帮助。
-
@chrylis-onstrike 你可以在没有接口的情况下进行测试,但是将你的代码撕成一堆由 Spring 粘在一起的小块进行测试是一件愚蠢的事情。
标签: java spring dependency-injection