从零开始学Spring(三)——SpringIOC与DI

  • 什么是IOC?

      在传统的开发中,我们通过new关键字创建对象,这种方式创建对象不利于我们在需求变更后的修改操作,例如:原来的需求是使用Orcle数据库存储数据,后来需求修改为使用Mysql数据库存储数据,此时我们就要去源码中找到创建orcle数据库对象的语句,重新创建Mysql对象并调用对象的相关方法。这显然不是我们希望看到的,我们希望的是只要修改配置文件,源码尽量保持不动,达到我们的修改目的。

      于是强大的SpringIOC登场,IOC全称为Inversion Of Control,也就是控制反转,意思是我们不自己创建对象,将对象的创建权交给Spring管理,我们直接使用创建好的对象即可。

下面举例传统开发方式与Spring开发方式的区别

  • 传统开发方式
  1. 编写UserDao接口
public interface UserDao {
    public void save();
    public void delete();
}

2、编写UserDaoOrcleImpl 实现类

public class UserDaoOrcleImpl implements UserDao{
        @Override
        public void save() {
            System.out.println("orcle-save");
        }
        @Override
        public void delete() {
            System.out.println("orcle-delete");
        }
    }

3、编写UserDaoMysqlImpl 实现类

public class UserDaoMysqlImpl implements UserDao{
    @Override
    public void save() {
        System.out.println("mysql-save");
    }

    @Override
    public void delete() {
        System.out.println("mysql-delete");
    }
}

4、编写测试类

public class test {
 public static void main(String[] args){
     UserDaoOrcleImpl userDaoOrcle = new UserDaoOrcleImpl();
     userDaoOrcle.save();
     userDaoOrcle.delete();
 }
}

5、修改数据库为mysql

public class test {
 public static void main(String[] args){
     UserDaoMysqlImpl userDaoMysql = new UserDaoMysqlImpl();
     userDaoMysql.save();
     userDaoMysql.delete();
 }
}

      在这里我们看到,当我们需求变动时,要去源码中重新创建对象,使得维护变得非常的不方便,在这个例子中,可能大家觉得不是很麻烦,但是往往项目中的类系是非常庞大的,那么维护起来的难度对开发人员来说可以说是一场”灾难”,也许只有经历过的人才能明白这种心情,Spring解救来了。

  • Spring开发方式
  1. 将类交给Spring管理,即添加配置文件ApplicationContext.xml,在配置文件中加入bean,其中id为自己起的名称,class为交给Spring管理的类的全路径。


    
    

2.通过ClassPathXmlApplicationContext加载配置文件

ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");

3.通过getBean(id)方式获取对象并强制转化类型

UserDao userDao =(UserDao)applicationContext.getBean("userDao");

4.编写测试类

public class test {
 public static void main(String[] args){
      // 1、加载配置文件(加载文件系统下的配置文件)
     // ApplicationContext applicationContext= new FileSystemXmlApplicationContext("B:\\SpringPro1\\src\\applicationContext.xml");
     // 1、加载配置文件(加载类路径下的配置文件)
     ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");
     // 2、 参数为配置文件中bean的id
     UserDao userDao = (UserDao)applicationContext.getBean("userDao");
     //3、调用UserDaoOrcleImpl类中的save方法
     userDao .save();
     userDao .delete();
 }
}

5.修改数据库为mysql

只需要修改配置文件,将

换成

即可



    
    

      使用SpringIOC可以在尽量不修改源码的,对程序进行扩充,只需要修改配置文件即可,而使用接口就是为了统一格式要求,如果没有遵循同一个接口,那么可能导致修改配置文件后还要对源码进行修改。 

  • SpringDI依赖注入

      依赖注入的前提必须要有IOC环境,同时Spring管理类的时候才能将类的依赖的属性值注入(设置)进去。

      依赖注入是通过配置文件对Spring管理类中依赖的属性进行赋值的过程。

      依赖注入实质上就是对象属性赋值的过程

  1. 传统方式

              A a =new class();//创建对象

             name=”张三”;//依赖注入即属性赋值

      2.DI方式

(1)实现类中的属性要提供set方法

public class UserDaoMysqlImpl implements UserDao{
    private String name;

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

    @Override
    public void save() {
        System.out.println("mysql-save"+name);
    }

    @Override
    public void delete() {
        System.out.println("mysql-delete");
    }
}

(2)在配置文件中配置依赖注入





    


(3)测试

public class test {
 public static void main(String[] args){
     // 1、加载配置文件(加载类路径下的配置文件)
     ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");
     // 2、 参数为配置文件中bean的id
     UserDao userDao = (UserDao)applicationContext.getBean("userDao");
     //3、调用UserDaoMysqlImpl类中的save方法
     userDao.save();
 }
}

(4)运行结果

mysql-save李四

你可能感兴趣的:(Spring,java,spring)