---恢复内容开始---
依赖注入和控制反转Ioc:
在学习Spring前,首先要理解这两个概念。什么是依赖注入,打个比方,有两个组件A和B,A依赖于B,A是一个类
Public class A { public void methodA() { B b = new B(); b.methodB(); } }
要在A类的方法中使用B的方法,我们需要先获得B实例的引用,若B是一个具体的类,则可以通过关键字new来创建实例,单如果B是个接口,且有多个实现,那么问题就复杂多了。
依赖注入是这样处理此种情形的:接管对象的创建工作,并将该对象的引用注入懂啊需要该对象的组件中。一般来说,我们有两种注入方法,set方法和构建方法:
set方法:
Public class A { private B b; public void methodA() { b.methodB(); } public void setB() { this.b = b; } }
构建方法注入:
Public class A { private B b; public void methodA() { b.methodB(); } public A(B b) { this.b = b; } }
然后Spring就是一个接手对象创建的一个框架,Spring管理 对象叫做beans。通过提供一个控制反转容器,来管理对象的依赖关系。因为不再自己new对象,所以也叫做Ioc(控制反转)。
Spring支持两种配置方法,xml文件和注解两种,此外还要创建一个ApplicationContext对象,代表Spring控制反转容器,org.springframeword.context.ApplicationContext接口有多个实现,包括ClassPathApplicationContext和FileSystemApplicationContext两种实现,他们都需要一个包含beans信息的xml文件,前者尝试在类加载路径中加载配置文件,后者在文件系统中加载。
下面为从类路径中加载config1.xml和config2.xml的ApplicationContext的一个代码示例:
Product product = context.getBean("product",product.class);
xml配置文件大概如下格式:
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> </beans>
里面写bean的信息
<bean name="product" class="xxx.xxx.Product">
然后通过这个xml文件,我们可以实现:
直接通过构造器创建一个bean实例
通过工厂的方法创建一个bean实例(就是set方法),就是在bean元素中加一个属性factory-method="setB"类似的
在类被毁灭的时候执行一些方法(在bean元素中甲属性destroy-metho="shutdown")
向构造器传递参数:
<bean>
<constructor-arg name="sdfsdf" value="sdfsdf"/>
……
</bean>
setter方法注入,比如我们现在写好了一个bean为Address类,然后这个employee类要用到Address类
<bean name="employee" class="xx.xx.Employee">
<property name="homeAddress" ref="address"/> <!-- 这个address就是那个Address类的bean的name -->
<property name="firstName" value="Junior"/>
</bean>
构造器的方法注入,其实就是想构造器传参的时候传一个ref也就是一个现成的bean