Spring——DI(依赖注入)/Ioc(控制反转)

来源:互联网 发布:mac命令行终端 代理 编辑:程序博客网 时间:2024/06/11 08:17

DI(Dependency Injection):依赖注入

    在运行期间,由外部容器动态地将依赖对象注入到组件中;

Ioc(Inversion of control):控制反转

    应用本身不负责依赖对象的创建及维护,依赖对象的创建和维护是由外部容器负责的。这样控制权就由应用本身转移到了外部容器,控制权的转移就是所谓的反转。例如:

最开始的代码:

public class GoodService{

    public void save(){

    //主动获取

    GoodDAO goodDAO = new GoodDAO();

    goodDAO.save();

}}

主动获取的方式,控制权在GoodService类中。硬编码方式。

NOW:

public class GoodService{

    private GoodDAO goodDAO;

    //set/get方法省略

    public void save(){

        goodDAO.save();

}}

GoodService获得一个GoodDAO编程被动接受。

从主动获取变成被动接受,控制权是不是变化了?IOC

Ioc控制反转,获得GoodDAO对象(依赖对象)的方式变成外部注入。

使用Spring框架实现Ioc/DI

    1、导入Spring框架;

    2、在配置文件中创建实例

<bean class="com.no1.dao.GoodsDAO" id="GoodsDAO"/>

class:表示类名。

id/name:实例名称

    3、获得Spring配置的实例

1 applicationContext类。

    newFileSystemXMLApplicationContext("src/applicationContext.xml");

2 getBean(“配置文件的id/name”)

    4、实现依赖注入

<bean class="com.no1.biz.GoodsBIZ" name="GoodsBIZ">

    <propertyname="goodsDAO"ref="GoodsDAO"/>

</bean>
三种实例化对象的方式

1、构造方法

<bean class="com.no1.dao.GoodsDAO" id="GoodsDAO"/>

2、工厂类的静态方法

public class StaticFactory{

    public static GoodDAO create(){

        return new GoodDAO();

}}

<bean id="GoodDAO " class="com.no1.factory.StaticFactory"factory-method="create"/>

3、工厂类的实例方法

public class MethodFactory{

    public GoodDAO create(){

        return new GoodDAO();

}}

<beanid="methodFactory"class="com.no1.factory.MethodFactory"/>

<beanid="GoodsDAO"factory-bean="methodFactory"factory-method="create"/>

二种依赖注入的方式

1、属性注入:调用set方法

public class GoodService{

    private GoodDAO goodDAO;

    //set/get方法省略

    public void save(){

        goodDAO.save();

}}

<bean class="com.no1.biz.GoodService"name="GoodService">

    <propertyname="goodDAO"ref="GoodDAO"/>

</bean>

2、构造注入:通过构造方法的方式

<bean class="com.no1.biz.GoodsBIZ" name="GoodsBIZ">

    <constructor-argindex="0"ref="GoodsDAO"/>

</bean>

index="0"表示构造方法的第一个参数

<constructor-argname="参数名称"



0 0
原创粉丝点击