Spring IOC的介绍:
通常,应用代码需要告知容器或框架,让它们找到自身所需要的类,然后再由应用代码创建待使用的对象实例。因此,应用代码在使用实例之前,需要创建对象实例。然而,[color=green]IoC模式中,创建对象实例的任务交给IoC容器或框架(Spring的配置文件),使得应用代码只需要直接使用实例,这就是IoC。[/color]相对IoC 而言,“依赖注入”的确更加准确的描述了这种设计理念。所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
任何重要的系统都需要至少两个相互合作的类来完成业务逻辑。通常,每个对象都要自己负责得到它的合作(依赖)对象。你会发现,这样会导致代码耦合度高而且难于测试。[color=green]使用IoC,对象的依赖都是在对象创建时由负责协调系统中各个对象的外部实体提供的,这样使软件组件松散连接成为可能。[/color]
(1)应用组件不需要在运行时寻找其协作者,因此更易于开发和编写应用;
(2)由于借助于IoC容器管理组件的依赖关系,使得应用的单元测试和集成测试更利于展开;
(3)通常,在借助于IoC容器关系业务对象的前提下,很少需要使用具体IoC容器提供的API,这使得集成现有的遗留应用成为可能。
因此,通过使用IoC能够降低组件之间的耦合度,最终,能够提高类的重用性,利于测试,而且更利于整个产品或系统集成和配置
[color=green]依赖注入和控制反转是同一个概念。具体含义:是当某个角色(可能是一个实例,调用者)需要另一个角色(另一个实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。[/color]
bean:那些组成应用的主题及有Spring IoC容器所管理的对象被称之为bean,而bean和bean之间的相互依赖关系通过配置元数据(xml文档)来描述。bean定义与应用程序中实际使用的对象一一对应,通常情况下bean的定义包括:服务层对象,数据访问层对象(DAO)等等。
容器:在SPRING中,org.springframework.beans.factory.BeanFactory是Spring IoC容器的实际代表者,IOC容器负责容纳此前所描述的bean,并对bean进行管理。
实例化容器:
ApplicationContext context=new ClassPathXmlApplicationContext'applicactionContext.xml';
BeanFactory factory=BeanFactorycontext;
:arrow:
- JDK 1.4+ collections available
- Loading XML bean definitions from file [D:\apache-tomcat-6.0.18\webapps\axis\WEB-INF\classes\bean.xml]
[color=red]Hello!Justin![/color]
通常,应用代码需要告知容器或框架,让它们找到自身所需要的类,然后再由应用代码创建待使用的对象实例。因此,应用代码在使用实例之前,需要创建对象实例。然而,[color=green]IoC模式中,创建对象实例的任务交给IoC容器或框架(Spring的配置文件),使得应用代码只需要直接使用实例,这就是IoC。[/color]相对IoC 而言,“依赖注入”的确更加准确的描述了这种设计理念。所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
任何重要的系统都需要至少两个相互合作的类来完成业务逻辑。通常,每个对象都要自己负责得到它的合作(依赖)对象。你会发现,这样会导致代码耦合度高而且难于测试。[color=green]使用IoC,对象的依赖都是在对象创建时由负责协调系统中各个对象的外部实体提供的,这样使软件组件松散连接成为可能。[/color]
(1)应用组件不需要在运行时寻找其协作者,因此更易于开发和编写应用;
(2)由于借助于IoC容器管理组件的依赖关系,使得应用的单元测试和集成测试更利于展开;
(3)通常,在借助于IoC容器关系业务对象的前提下,很少需要使用具体IoC容器提供的API,这使得集成现有的遗留应用成为可能。
因此,通过使用IoC能够降低组件之间的耦合度,最终,能够提高类的重用性,利于测试,而且更利于整个产品或系统集成和配置
[color=green]依赖注入和控制反转是同一个概念。具体含义:是当某个角色(可能是一个实例,调用者)需要另一个角色(另一个实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。[/color]
bean:那些组成应用的主题及有Spring IoC容器所管理的对象被称之为bean,而bean和bean之间的相互依赖关系通过配置元数据(xml文档)来描述。bean定义与应用程序中实际使用的对象一一对应,通常情况下bean的定义包括:服务层对象,数据访问层对象(DAO)等等。
容器:在SPRING中,org.springframework.beans.factory.BeanFactory是Spring IoC容器的实际代表者,IOC容器负责容纳此前所描述的bean,并对bean进行管理。
实例化容器:
ApplicationContext context=new ClassPathXmlApplicationContext'applicactionContext.xml';
BeanFactory factory=BeanFactorycontext;
package onlyfun.caterpillar;
public class HelloBean {
private String helloWord = "Hello!World!";
public void setHelloWord(String helloWord) {
this.helloWord = helloWord;
}
public String getHelloWord() {
return helloWord;
}
}
package onlyfun.caterpillar;
import java.io.*;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
public class SpringTest {
public static void main(String[] args) throws IOException {
//InputStream is = new FileInputStream("D:\\apache-tomcat-6.0.18\\webapps\\axis\\WEB-INF\\classes\\bean.xml");
//BeanFactory factory = new XmlBeanFactory(is);
Resource resource = new FileSystemResource("WEB-INF/classes/bean.xml");
BeanFactory factory = new XmlBeanFactory(resource);
HelloBean hello = (HelloBean) factory.getBean("helloBean");
System.out.println(hello.getHelloWord());
}
}
<?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="helloBean" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord">
<value>Hello!Justin!</value>
</property>
</bean>
</beans>
:arrow:
- JDK 1.4+ collections available
- Loading XML bean definitions from file [D:\apache-tomcat-6.0.18\webapps\axis\WEB-INF\classes\bean.xml]
[color=red]Hello!Justin![/color]