Spring,DI和IOC

Spring简介
Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版。Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率。

Spring总结起来优点如下:

低侵入式设计,代码的污染极低。
独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺。
Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦。
Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用。
Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。

Spring框架的组成结构图如下所示:

Spring的DI和IOC
DI:依赖注入,一个BookService类的功能需要依赖另外一个BookDao类配合,同时需要赋上一
个具体的对象,则成这种关系是依赖注入;
IOC:控制反转,以前依赖的对象自己直接new,现在不需要new,框架会自动注入对象,创建对
象的权利转移给了框架;
spring框架负责所有对象的创建、管理和依赖注入;所有的对象存储的容器叫做IOC容器;
1. 创建项目,导入 spring jar包,按照如下目录结构创建接口及其实现类。

首先是dao层的包和接口 

//BookDaoImpl

public class BookDaoImpl implements BookDao {
    @Override
    public void insert() {
        System.out.println("BookDaoImpl...save");
    }
}

//BookDao 


public interface BookDao {
    void insert();
}

然后是service层的包和接口 

// BookServicelmpl


public class BookServicelmpl implements BookService {
    private BookDao bookDao;
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void setBookDao(BookDao bookDao){
        this.bookDao = bookDao;
    }
    @Override
    public void save() {
        System.out.println("BookServicelmpl...save");
        bookDao.insert();
    }
}
 //BookServiceVip


public class BookServiceVip implements BookService {
    private BookDao bookDao;
    @Override
    public void save() {
        System.out.println("BookServiceVip...save");
        bookDao.insert();
    }
}
public interface BookService {
    void save();
}
2. 使用 spring 完成 IOC 的配置和 DI 依赖注入, 创建 spring 的核心配置文件
<?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.xsd">

    <!--把所有对象创建到spring的IOC容器中,并起上名字
  id:表示给对象起名字
  class:类的全类名
  -->
    <bean id="bookDao" class="com.zhang.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.zhang.service.impl.BookServicelmpl">
        <!--spring的依赖注入:property表示BookServiceImpl的属性,常规属性使用value赋值,
            类型属性使用ref引用-->
        <property name="name" value="张三"/>
        <property name="bookDao" ref="bookDao"/>
    </bean>
</beans>
注意: BookServiceImpl 需要给 bookDao 属性设置 setter 方法,框架才能自动注入
3.在 test 中进行测试
public class Test01 {
    BookService bookService;

    @Test
    public void test01() {
        System.out.println("BookServlet...add");
        //1.获得IOC容器
        ClassPathXmlApplicationContext context = new
        ClassPathXmlApplicationContext("spring.xml");
        //2.根据名字从容器中获取对象
        bookService = (BookService) context.getBean("bookService");
        bookService.save();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值