Spring-IOC

什么是IOC

  • IOC:Inversion of Control(控制反转)
  • 控制反转:将对象的创建权反转给(交给)Spring

传统开发模式

  • 业务和实现类过于紧密
  • 如果想要从当前实现类切换到另一个实现类需要修改源代码,如果没有源码的话那就改不了了:

  • 通过工厂的设计模式可以实现,接口与实现类业务的分离
  • 但是,当需要切换时,还是需要修改BeanFactory
  • 尽量在 不需要修改源代码 的基础上,对程序进行扩充,也就是进行扩展

  • 在工厂内部使用配置文件的方式进行加载(也就是通过反射,你在配置文件中给定类的全路径即可加载)
  • 在需要改变实现类的时候,就不需要修改源码,只需要修改配置文件的类路径即可

使用Spring-IOC

  • 添加 Spring-IOC 所需 jar

  • 创建配置文件
  • 通常名称起为 applicationContext.xml
  • 在 intellij IDEA 中创建一个 resources 文件夹,专门用来存放配置文件,也就是资源目录
  • 创建好了之后呢还需要标记为资源目录,否则 Intellij IDEA 不会把它编译到 src 中,标记方式如下:

  • 创建好了 applicationContext.xml 文件之后添加如下内容:
<?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">
</beans>
  • top.it6666.service 目录下创建 UserDao 接口:
  • 然后在接口当中定义规范也就是定义方法:
/**
 * @author: BNTang
 **/
public interface UserDao {
    void save();
    void delete();
}
  • top.it6666.service.impl 目录下创建 UserDaoMySQLImpl 实现类,实现 UserDao 接口:
  • 然后在实现接口当中的方法:
/**
 * @author: BNTang
 **/
public class UserDaoMySQLImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("MySQL → save");
    }

    @Override
    public void delete() {
        System.out.println("MySQL → delete");
    }
}
  • top.it6666.service.impl 目录下创建 UserDaoOracleImpl 实现类,实现 UserDao 接口:
  • 然后在实现接口当中的方法:
/**
 * @author: BNTang
 **/
public class UserDaoOracleImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("Oracle → save");
    }

    @Override
    public void delete() {
        System.out.println("Oracle → delete");
    }
}
  • 修改 applicationContext.xml 配置文件
  • 添加一个实现类的配置,也就是配置一个类的全路径
... 

<bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl"/>

...
  • id:为自己起的名称
  • class:为接口实现类的全路径,也就是类的全路径
  • 创建测试类进行测试代码如下:
  • 自行运行即可
/**
 * @author: BNTang
 **/
public class UserDaoTest {
    @Test
    public void save() {
        // 1.加载配置文件
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 2.获取配置文件当中配置的实现类
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        userDao.save();
    }
}
  • getBean:参数为配置文件当中 <bean> 的Id
posted @ 2020-09-27 22:25  BNTang  阅读(67)  评论(0编辑  收藏  举报