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如何知道使用哪个多态类型。
只要接口只有一个实现,并且该实现使用@component
注释,并启用Spring的组件扫描,Spring框架就可以找到(接口,实现)对。如果未启用组件扫描,则必须在application-config.xml(或等效的spring配置文件)中显式定义bean。
我需要@qualifier还是@resource?
一旦有了多个实现,就需要对每个实现进行限定,并且在自动布线过程中,需要使用@qualifier
注释来注入正确的实现,以及@autowired
注释。如果您使用@resource(J2EE语义),那么您应该使用这个注释的name
属性指定bean名称。
为什么我们要autowire接口而不是已实现的类?
首先,通常为接口编写代码总是一个很好的做法。其次,在spring的情况下,您可以在运行时注入任何实现。一个典型的用例是在测试阶段注入模拟实现。
interface IA
{
public void someFunction();
}
class B implements IA
{
public void someFunction()
{
//busy code block
}
public void someBfunc()
{
//doing b things
}
}
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();
}
您的bean配置应该如下所示:
<bean id="b" class="B" />
<bean id="c" class="C" />
<bean id="runner" class="MyRunner" />
或者,如果在存在组件扫描的包上启用了组件扫描,则应该使用@component
限定每个类,如下所示:
interface IA
{
public void someFunction();
}
@Component(value="b")
class B implements IA
{
public void someFunction()
{
//busy code block
}
public void someBfunc()
{
//doing b things
}
}
@Component(value="c")
class C implements IA
{
public void someFunction()
{
//busy code block
}
public void someCfunc()
{
//doing C things
}
}
@Component
class MyRunner
{
@Autowire
@Qualifier("b")
IA worker;
....
worker.someFunction();
}
然后,MyRunner
中的worker
将注入B
类型的实例。
问题内容: 仅仅是因为动态类型,我们不需要python中的接口概念(例如Java和C#)吗? 问题答案: 将 作为关键字和神器是在Java引入1(和C#把它从那里)来描述一下合同的对象必须坚持为。 但是,接口一直是面向对象范例的关键部分,基本上它表示对象必须响应的方法。Java只是强制执行此机制以提供静态类型检查。 因此,动态(OO)编程语言 确实会 使用接口,甚至认为它们不会静态检查它们。就像其
我正在从这个url阅读Spring Hibernate CRUD教程 http://viralpatel.net/blogs/spring3-mvc-hibernate-maven-tutorial-eclipse-example/ 请任何人告诉我为什么在ContactController中。java,接口是自动连接的,而不是类ContactServiceImpl。 类似地,在接口被注入。我们不应
我只需要一些关于java中标记接口的澄清。我读到它在java中是一个空接口。我只想知道为什么以及在哪里我们需要使用这个。有人能帮忙吗?
问题内容: 使用JDBC连接池工具(如DBCP或c3p0)有什么好处? 如果只有 一个* 用户的 小型CRUD 应用程序,我们是否可以将 一个 连接会话创建为一个 单例 ? * PS :我正在构建一个带有小型数据库(5个表)的小型后端应用程序。 问题答案: 从Jon Skeet的答案到连接和语句池的好处是什么?: 创建到数据库服务器的网络连接是(相对)昂贵的。同样,要求服务器准备SQL语句(相对)
问题内容: 我不知道您是否认为这是一个重要问题,但我想知道。float是一个浮点数(4个字节)。double是浮点数(8个字节)。为什么我们定义双重假名铸造: 但是我们需要使用浮点数进行转换: 要么 先感谢您。 问题答案: 如果浮点文字以字母或结束,则其类型为float 。否则,其类型为,并且可以选择以字母或结尾。 浮点类型(和)也可以使用E或e(对于科学记数法),或(32位浮点文字)和或(64位