工程目录如下
要加入的jar文件有三个。
下面比较IoC与传统bean调用的不同。
接口类
package wen; public interface Hello { public String world= null; public String setWords(String world) ; public void getWords(); }
接口实现类
package wen; public class HelloImp implements Hello{ private String wString ; public HelloImp(){ System.out.println("我被容器自动调用"); } @Override public String setWords(String world) { this.wString = world ; return wString; } @Override public void getWords() { System.out.println("第一个spring:"+wString); } }
传统的bean调用
要先实例化一个对象 ,通过对象来使用这个类的方法。
package wen; public class Test { public static void main(String [] args ){ Hello hello = new HelloImp() ; hello.setWords("你好") ; hello.getWords(); } }
IoC容器实现
在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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="hello" class="wen.HelloImp"> </bean> </beans>
spring提供了很好的测试方法,可以了解配置的类是否在spring容器中实例化。
package wen; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class HelloFactory { public static void main(String [] args){ XmlBeanFactory bFactory = new XmlBeanFactory( new ClassPathResource("spring.xml")) ; Hello hello = (Hello)bFactory.getBean("hello") ; hello.setWords("你好") ; hello.getWords(); bFactory.destroySingleton("hello"); } }
两者对比
传统的方法:通过接口访问对象要实例化,这增加了代码之间的耦合度,调用时还要了解实现接口类中定义的方法,还不容易对生成的对象进行管理。
容器管理方式:当程序中用到这个对象的时候,依赖容器进行实例化,实现方法调用时,只要参考接口中的实现方法,还可以对对象进行管理,消除。
Spring可以用在任何java项目中,从一定程序上说,它是对jdk的扩展,也是相对独立的,可以当作是一个管理java类的容器。