Spring中的IOC示例
工程的大概内容是:
一个人在中国时用中国话问候大家,在国外时用英语问候大家。
其中,
IHelloMessage是接口,用来定义输出问候信息
public interface IHelloMessage {
public String sayhello();
}
HelloWorld是接口的实现类,向用户输出 hello world 信息
public class HelloWorld implements IHelloMessage { @Override
public String sayhello() {
// TODO Auto-generated method stub
return "hello world";
} }
HelloChina 是接口的实现类,向用户输出 大家好 信息
public class HelloChina implements IHelloMessage{ @Override
public String sayhello() {
// TODO Auto-generated method stub
return "大家好";
} }
Person是人物类,调用IHelloMessage接口,向用户输出问候信息
public class Person {
private IHelloMessage helloMessage; public IHelloMessage getHelloMessage() {
return helloMessage;
} public void setHelloMessage(IHelloMessage helloMessage) {
this.helloMessage = helloMessage;
}
public String sayHello(){
return helloMessage.sayhello();
} }
Main是程序的入口类,用于加载配置文件以及启动IOC容器,调用人物类,向用户输出问候信息
public class Main { public static void main(String[] args) {
//利用FileSystemResource读取配置文件
Resource r = new FileSystemResource("helloMessage.xml");
//利用XmlBeanFactory加载配置文件同时启动IOC容器
BeanFactory f = new XmlBeanFactory(r);
//接下来在IOC容器中获取Person类的实例
Person person = (Person) f.getBean("person");
String message = person.sayHello();
System.out.println(message);
} }
配置文件helloMessage
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="helloWorld" class="com.xiongda.spring.hello.HelloWorld"></bean>
<bean id="helloChina" class="com.xiongda.spring.hello.HelloChina"></bean>
<bean id="person" class="com.xiongda.spring.hello.Person">
<property name="helloMessage" ref="helloWorld"/>
</bean>
</beans>
可以看出原本的类之间是独立的,通过配置文件在他们之间建立了依赖,也就是说将控制权由原来的对象本身转移到了配置文件当中,也就是所谓的控制反转