Spring IOC基础

根据黑马程序员课程学习做的笔记

目录

  • 耦合
    • 耦合的概念
    • 耦合的例子(jdbc)
  • Spring如何降低耦合
    • ioc
    • 手写ioc容器
  • Spring IOC的使用
    • 创建Bean的三种方式
    • Spring的依赖注入

耦合

耦合的概念

耦合的例子(jdbc)

注册驱动的两种方法:( 如果没有相应的驱动)

   //
        DriverManager.registerDriver(new Driver());

在这里插入图片描述
编译期间就报错

        Class.forName("com.mysql.jdbc.Driver");

Spring IOC基础_第1张图片
可以运行,但是在运行期报错

※ 实际开发中,应该做到:编译器不依赖,运行时才依赖
※ 第一步:使用反射来创建对象,而避免使用new关键字
※ 第二步:通过读取配置文件来获取要创建对象的全限定类名

Spring如何降低耦合

ioc

在程序中,如果一个类依赖A对象,在代码中直接 new A(),那么耦合度非常高,在编译器就会无法运行。
而如果将对一个类的表示 变成 字符串,在运行期间利用反射对这个类进行加载,那么就可以降低耦合度。

ioc就是将对象的生成交给ioc容器,并且由ioc容器对对象的依赖进行管理,从而实现了降低耦合度的目的

Spring IOC基础_第2张图片
Spring IOC基础_第3张图片

手写ioc容器


public class MyFactory {
    private   static Properties pro;
    private static Map map;
    static{
        pro =new Properties();
        InputStream inputStream = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
        map = new HashMap<>();

        try {
            pro.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Enumeration keys = pro.keys();
        while(keys.hasMoreElements()){
            try {
                String key = keys.nextElement().toString();
                String beanPath = pro.getProperty(key);
                Object value = Class.forName(beanPath).newInstance();
                map.put(key, value);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    public static Object getBean(String beanname){
        return map.get(beanname);
    }
    
}

Spring IOC的使用

创建Bean的三种方式

① 使用默认无参构造函数


② 使用工厂的成员方法
先工厂加入ioc容器,再使用 factory-bean 和factory-method 把工厂生产的bean加入到ioc容器

  
  

③ 使用工厂的静态方法

因为是静态方法所以工厂不需要加入到ioc容器中,这是和②的不同


Spring的依赖注入

你可能感兴趣的:(SpringBoot笔记)