我已经下载了一个Spring注释示例,但我无法看到它如何选择要注入的类,继承代码和配置。 首先是IWriter接口的几个实现(未显示)
package writers;
import org.springframework.stereotype.Service;
@Service
public class NiceWriter implements IWriter {
public void writer(String s) {
System.out.println("Nice Writer - " + s);
}
}
package writers;
import org.springframework.stereotype.Service;
@Service
public class Writer implements IWriter{
public void writer(String s) {
System.out.println("Writer - "+s);
}
}
package testbean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import writers.IWriter;
@Service
public class SpringBeanWithDI{
private IWriter writer;
@Autowired
public void setWriter(IWriter writer) {
this.writer = writer;
}
public void run() {
String s = "This is my test";
writer.writer(s);
}
}
测试bean: -
package main;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import testbean.SpringBeanWithDI;
public class TestBean {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/beans.xml");
BeanFactory factory = context;
SpringBeanWithDI test = (SpringBeanWithDI) factory.getBean("springBeanWithDI");
test.run();
}
}
和beans.xml文件: -
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="testbean" />
<context:component-scan base-package="Writers" />
</beans>
一切都很简单,但为什么总是注入“作家”实施?
答案 0 :(得分:0)
从文件中我发现: -
“对于后备匹配,bean名称被视为默认限定符值。这意味着可以使用id”main“而不是嵌套的限定符元素来定义bean,从而得到相同的匹配结果。
但请注意,虽然这可以用来通过名称来引用特定的bean,但@Autowired基本上是关于带有可选语义限定符的类型驱动注入。这意味着限定符值,即使使用bean名称回退,在类型匹配集中总是具有缩小语义;它们在语义上不表达对唯一bean id的引用。“ 所以在我的例子中,字段'writer'用于查找名为'Writer'的类。
私人IWriter作家;
聪明! (也许太聪明了!)