从零开始学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管理的类的全路径。
<?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">
    <!--<bean id="userDao" class="com.ph.demo1.UserDaoMysqlImpl" />-->
    <bean id="userDao" class="com.ph.demo1.UserDaoOrcleImpl" />
</beans>

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

只需要修改配置文件,将

<bean id="userDao" class="com.ph.demo1.UserDaoOrcleImpl" 换成

<bean id="userDao" class="com.ph.demo1.UserDaoMysqlImpl" 即可

<?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">
    <bean id="userDao" class="com.ph.demo1.UserDaoMysqlImpl" />
    <!--<bean id="userDao" class="com.ph.demo1.UserDaoOrcleImpl" />-->
</beans>

      使用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)在配置文件中配置依赖注入

<?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">

<bean id="userDao" class="com.ph.demo1.UserDaoMysqlImpl" >
    <property name="name" value="李四"/>
</bean>
<!--<bean id="userDao" class="com.ph.demo1.UserDaoOrcleImpl" />-->
</beans>

(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李四

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值