以下 是一个例子:
先编写接口 Man :
public interface Man {
public String sayHello();
}
然后写 Man 的实现类 Chinese 和 American :
@Service
public class Chinese implements Man{
public String sayHello() {
return "I am Chinese!";
}
}
@Service
public class American implements Man{
public String sayHello() {
return "I am American!";
}
}
@Service 注释表示定义一个 bean ,自动根据 bean 的类名实例化一个首写字母为小写的 bean ,例如 Chinese 实例化为 chinese , American 实例化为 american,如果需要自己改名字则:@Service("你自己改的bean名") 。
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=" http://www.springframework.org/schema/beans "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
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/context
http://www.springframework.org/schema/context /spring-context-2.5.xsd">
<context:annotation-config/>
<context:component-scan base-package="testspring.main"/>
</beans>
在 spring 的配置文件里面只需要加上 <context:annotation-config/> 和 <context:component-scan base-package=" 需要实现注入的类所在包 "/>,可以使用base-package="*"表示全部的类。
编写主类测试:
@Service
public class Main {
@Autowired
@Qualifier("chinese")
private Man man;
public static void main(String[] args) {
// TODO code application logic here
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
Main main = (Main) ctx.getBean("main");
System.out.println(main.getMan().sayHello());
}
public Man getMan() {
return man;
}
}
在 Man 接口前面标上 @Autowired 和 @Qualifier 注释使得 Man 接口可以被容器注入,当 Man 接口存在两个实现类的时候必须指定其中一个来注入,使用实现类首字母小写的字符串来注入。否则可以省略,只写@Autowired