1. 依赖注入以及创建Spring配置

依赖注入以及创建Spring配置

依赖注入

依赖注入,即Spring Dependence Injection,更经典的叫法是控制反转(IOC:Inversion of Control)。

  • 容器通过注入设定实现对象来解决对象之间的依赖关系(推模式)

  • 传统的组件初始化或用服务定位模式,组件实现定位(拉模式)

依赖注入,此词为Martin Fowler提议的术语,字面意思上可以更好的理解。依赖注入的原则就是:应用对象不应该负责查找资源或其他依赖的协作组件。配置对象的工厂应该交给IOC容器来完成,“查找资源的逻辑应该从代码中抽取出来,交给容器负责”。

方式一:如果不采用依赖注入的方式,那么如果ObjectA要完成业务逻辑功能必须要有ObjectB和ObjectC对象时,就必须要去创建(create)这两个对象或者查找(look-up)这两个对象的引用。

这里写图片描述

public class OrderServiceImpl implements IorderService{
    public Order saveOrder(Order order) throws OrderException{
        //创建连接对象
        //开启事务
        //查找并执行Dao中的方法来完成功能
        //提交事务
    }
}

上面一个程序片段的例子,使用的就是传统的组件初始化模式,即当需要某些对象时就去查找或创建它。

方式二:如果采用依赖注入的方式,ObjectA需要用到ObjectB和ObjectC时,应用上下文则会事先设定ObjectB和ObjectC的实例,并把它们注入到ObjectA中去。

这里写图片描述


/*针对接口编程*/

public class OrderSpringService implements IOrderService{
    private IOrderDao orderDao;

    public Order saveOrder(Order order) throws OrderException{
        return orderDao.saveNewOrder(order);
    }

    public void setOrderDao(IOrderDao orderDao){
        this.orderDao=orderDao;
    }
}

上面的例子便是依赖注入,当需要一个组件或是对象时,通过容器将其注入进来。

依赖注入配置文件:

这里写图片描述

上面的配置文件中,id为 “myDataSource” 的Bean是一个数据源;id为 “myOrderDao” 的Bean是一个Dao的实例,用到了数据源Bean,需要使用的时候,数据源Bean将会注入其中;id为 “myOrderService” 的Bean是一个服务Bean,引用到了 “myOrderDao” Bean,需要的时候也是以依赖
注入的方式注入其中。

创建Spring配置

Spring容器提供两种配置Bean的方式:

  • XML配置文件

  • 基于Java注解的配置方式

Spring配置文件,根元素来自于Spring beans命名空间 <beans>元素,例如名叫chinese-idol.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 引用Spring的多个Schema空间的格式定义文件 -->

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Bean declarations go here -->

    <bean id="li" class="com.li.spring.chineseido.Juggler">
        <constructor-arg value="10"></constructor-arg>
    </bean>
    <bean id="bike" class="com.li.spring.chineseido.Bike">
    </bean>
    <bean id="zhang" class="com.li.spring.chineseido.RidableJuggler">
        <constructor-arg value="10"></constructor-arg>
        <constructor-arg ref="bike"></constructor-arg>
    </bean>
    <bean id="theStage" class="com.li.spring.chineseido.Stage"
        factory-method="getInstance">
    </bean>
    <bean id="auditorium" class="com.li.spring.chineseido.Auditorium"
        init-method="turnOnLight" destroy-method="turnOffLight"></bean>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值