Spring---基于Spring IOC的小程序
实现的功能以及各文件间的关系
IHelloMessage:一个接口,用于定义输出问候信息。
HelloWorld、HelloChina:接口的实现类。在这里表示人在不同的地方
Person:一个人物类,调用IHelloMessage接口,向用户输出问候信息
Main:程序的入口类,用于加载配置文件以及启动IOC容器,调用人物类,向用户输出问候信息
IHelloMessage
public interface IhelloMessage { public String sayHello(); public String say(); }
HelloWorld、HelloChina
public class HelloWord implements IhelloMessage { @Override public String sayHello() { // TODO Auto-generated method stub return "Hello World"; } @Override public String say() { // TODO Auto-generated method stub return "ceshi"; } }
Person
public class Person { private IhelloMessage helloMessage; public void setHelloMessage(IhelloMessage helloMessage) { this.helloMessage = helloMessage; } public IhelloMessage getHelloMessage() { return helloMessage; } public String sayHello() { return helloMessage.say(); } }
Main
public class Main { public static void main(String[] args) { // 读取配置文件 Resource resource = new FileSystemResource("helloMessage.xml"); // 加载并启动IOC容器 BeanFactory factory = new XmlBeanFactory(resource); // 从容器中获取实例 Person person = (Person) factory.getBean("person"); String str = person.sayHello(); System.out.println(str); } }
spring3.1以上的版本中XmlBeanFactory已过时,有两种解决方案
1.将XmlBeanFactory替换成DefaultListableBeanFactory和XmlBeanDefinitionReader,代码如下Main类所写
public class Main { public static void main(String[] args) { // 读取配置文件 Resource resource = new FileSystemResource("helloMessage.xml"); // 构造工厂 DefaultListableBeanFactory factory= new DefaultListableBeanFactory (); // 通过构造工厂得到加载并启动IOC容器 XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory); // 将读取到的配置文件加载到容器中 reader.loadBeanDefinitions(resource); // 从容器中获取实例 Person person = (Person) factory.getBean("person"); String str = person.sayHello(); System.out.println(str); } }
2.使用其它几种方式加载配置文件。详见Spring---加载配置文件的几种方法(org.springframework.beans.factory.BeanDefinitionStoreException)
配置文件xml
Java bean
每个bean对应一个java文件,当这个类文件配置到spring容器当中后,就变成了一个一个小豆子,而每个小豆子都拥有自己独立的功能。在运行spring工程之前,我们需要做的有两件事情。第一,将这些java类以java bean的形式注册到spring容器中。第二,通过配置文件来配置java bean之间的依赖关系。各个单独的类(组件)只需要关心自己的核心业务逻辑,而它们之间的依赖关系,则交由spring容器来配置和管理,这就是控制反转,而相对于类(组件),我们则可以称为依赖注入。以下是配置文件的示例代码
<?xml version="1.0" encoding="UTF-8"?> <!-- 定义使用哪种规范进行解析配置文件 --> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- bean:定义java bean --> <bean id = "helloWorld" class = "com.hudongwu.spring.chapter01.HelloWord"></bean> <bean id = "helloChina" class = "com.hudongwu.spring.chapter01.HelloChina"></bean> <bean id = "person" class = "com.hudongwu.spring.chapter01.Person"> <!-- 与其它java bean建立依赖关系 --> <property name="helloMessage" ref="helloWorld"></property> </bean> </beans>