啊立的Spring框架学习笔记(一)

Spring学习笔记(一)

学习Spring这段时间,一直有粗略的做着笔记,想根据做的笔记和代码以及阅读的一些博客,把对Spring的理解和一些概念再次记录下来,巩固一下也方便以后回看。

一、Spring简介
  • 1、Spring是一个分层的Java SE/EE 应用的全栈轻量级框架。
  • 2、两大内核:IOC(控制反转)和AOP(面向切面编程)

    二、IOC 控制反转 原理剖析

  • 1、先用一组程序创建对象图来了解传统程序和使用IOC/DI容器后的程序在创建对象时的不同操作过程:流程
  • 2、程序代码实现(同个程序中修改)

2.1 传统模式下实现传统1


传统2
2.2 可以很明显看出,业务层实现类需要通过new操作符生成持久层对象,用户类需要通过new操作符生成业务层对象,它们之间的耦合度非常高,会导致代码的独立性很差。


2.3 使用BeanFactory和Bean.properties实现
创建配置文件bean.properties (resources文件夹下)

    accountDao=com.it.DAO.impl.AccountDaoImpl
    accountService=com.it.service.impl.AccountServiceImpl

2.4 新建BeanFactory工厂类反射创建对象

       // 定义一个Properties对象
       private static final Properties prop;
       private static final Map<String, Object> beans;
   
       // 使用静态代码块为Properties对象赋值
       static {
           // 实例化对象
           prop = new Properties();
           // 获取properties文件的流对象
           // 类加载器
           InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
           try {
               prop.load(in);
   
               // 实例化容器
               // 避免多例创建对象:
               //      定义一个Map,用于存放要创建的对象,称为容器
               beans = new HashMap<>();
               // 取出配置文件中所有的key
               Enumeration<Object> keys = prop.keys();
               // 遍历枚举
               while (keys.hasMoreElements()) {
                   // 取出每个key
                   String key = (String) keys.nextElement();
                   // 反射创建对象
                   Object value = Class.forName(prop.getProperty(key)).getDeclaredConstructor().newInstance();
                   // 把key和value放入容器中
                   beans.put(key, value);
               }
           } catch (Exception e) {
               throw new ExceptionInInitializerError("初始化properties对象失败");
           }finally {
               if (in != null) {
                   try {
                       in.close();
                   } catch (Exception e) {
                       e.printStackTrace();
                   }
               }
           }
       }
   
       // 单例设计模式,使用Map作为容器去存储创建的bean对象
       // 根据Bean的名称获取相应bean对象
       public static Object getBean(String beanName) {
           return beans.get(beanName);
       }

2.5 调用创建对象

// 创建持久层接口对象
    IAccountDao iAccountDao = (IAccountDao) BeanFactory.getBean("accountDao");
// 创建业务层接口对象,执行方法
    public static void main(String[] args) {
            //IAccountService iAccountService = new AccountServiceImpl();
            IAccountService iAccountService = (IAccountService) BeanFactory.getBean("accountService");
            iAccountService.saveAccount();
        }

使用Properties配置文件和工厂类BeanFactory利用反射机制创建对象,降低程序耦合度。

3、耦合度:即程序间的依赖关系(类之间、方法之间),在实际开发中应该尽量降低程序间的依赖关系,做到编译器不依赖,运行时才依赖;这恰恰就是IOC的作用–解耦。

3.1 解耦思路:

  • (1) 使用反射机制来创建对象,避免使用new操作符
  • (2) 通过读取配置文件来获取要床架的对象的全限定类名

4、IOC(控制反转),从上述例子可以看出程序创建对象时,程序主动创建则为正转;由IOC容器来查找和注入依赖对象,被动地接受依赖对象,也就是获取依赖对象的方式变为被动了,这就是控制权的反转。
在Spring中实现控制反转的就是IOC容器,实现方法就是依赖注入(DI)。

今天先记录到这吧,Spring的概念、内核以及IOC的实现原理和作用;学习笔记是根据观看的黑马教学视频时记下的笔记以及阅读了一些大牛的博客所记录的。加油

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值