Spring01——Spring简介、Spring Framework架构、Spring核心概念、IOC入门 ...

打印 上一主题 下一主题

主题 1010|帖子 1010|积分 3030

为什么要学



  • spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%
  • 专业角度

    • 简化开发:低落企业开发的复杂度
    • 框架整合:高效整合其他技术,提高开发与运行服从

学什么



  • 简化开发

    • IOC
    • AOP

      • 事务处理


  • 框架整合

    • MyBatis

怎么学



  • 学习Spring框架计划头脑
  • 学习基础利用,思索:利用与头脑之间的接洽
  • 学习案例,熟练应用利用的同时体会头脑
01-初识spring



  • 官网:https://spring.io/
  • Spring全家桶:Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能


    • Spring Framework:全家桶中其他全部的技术都依赖于Spring Framework执行,底层计划性框架,全部技术都能在上面运行
    • Spring Boot:在Spring简化开发的基础上提高开发速度
    • Spring Cloud:分布式开发
      上述三个框架为重要的学习框架

02-Spring Framework系统架构

Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基
系统架构讲求上层依赖于下层

  • Core Container:核心容器

    • 容器中放对象

  • AOP:面向切面编程,不影响原始程序的基础上做增强功能

    • Aspect:AOP头脑实现

  • Data Access/Integration

    • Data Access:数据访问
    • Data Integration:数据集成
    • Transaction:事务

  • Web:Web开发

    • springmvc相关

  • Test:单元测试与集成测试

    学习路线

03-核心概念

代码书写现状:假如想更改数据层的实现,就还得更改业务层new的对象,源代码更改了,就需要重新编译、测试、摆设、发布等

上述标题在于:在类中写了其他的实现,就导致了代码的耦合度偏高
解决方案:利用对象时,在程序中不主动利用new产生对象,转换为由外部提供

上述头脑即为:IOC (Inversion of Control) 控制反转
IOC (Inversion of Control) 控制反转



  • 即:利用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此头脑称为控制反转
Spring与IOC的关系、Bean的概念

Spring技术对IOC头脑进行了实现


  • Spring提供了一个容器,称为IOC容器(亦称Spring容器),用来充当IOC头脑中的“外部
  • IOC容器负责对象的创建、初始化等过程,被创建或管理的对象称为Bean
DI (Dependency Injection) 依赖注入

由于service依赖dao运行,所以在IOC容器中,也将service依赖于dao


  • 于是有:在容器中建立bean与bean之间的依赖关系的整个过程(绑定service与dao之间依赖关系的过程),称为依赖注入

怎样实现的充分解耦

上述一系列的利用都是为了一个目的:充分解耦


  • 利用IOC容器管理bean (IOC)
  • 在IOC容器内将有依赖关系的bean进行关系绑定 (DI)
    终极结果
  • 利用对象时不仅可以直接从IOC容器中获取,而且获取到的bean已经绑定了全部的依赖关系
核心概念小结

重点要理解什么是IOC/DI头脑、什么是IOC容器和什么是Bean:

  • 什么IOC/DI头脑?

    • IOC:控制反转,控制反转的是对象的创建权
    • DI:依赖注入,绑定对象与对象之间的依赖关系

  • 什么是IOC容器?

    • Spring创建了一个容器用来存放所创建的对象,这个容器就叫IOC容器

  • 什么是Bean?

    • 容器中所存放的一个个对象就叫Bean或Bean对象

04-IOC入门案例

IOC入门案例重要介绍:Spring到底是怎样来实现IOC的
思路分析


  • Spring是利用容器来管理bean对象的,那么管什么?

    • 重要管理项目中所利用到的类对象,比如(Service和Dao)

  • 怎样将被管理的对象告知IOC容器?

    • 配置文件

  • 被管理的对象交给IOC容器,要想从容器中获取对象,就先得思索怎样获取到IOC容器?

    • Spring框架提供的相应接口,即:ApplicationContext

  • IOC容器得到后,怎样从容器中获取bean?

    • 调用Spring框架提供对应接口中的方法

  • 利用Spring导入哪些坐标?

    • 用什么,就在pom.xml中导入相应依赖

代码实现

需求分析:将BookServiceImpl和BookDaoImpl交给Spring管理,并从容器中获取对应的bean对象进行方法调用。

  • 创建maven项目

  • pom.xml添加Spring的依赖jar包(和junit测试)
  1. <dependencies>
  2.         <dependency>
  3.             <groupId>org.springframework</groupId>
  4.             <artifactId>spring-context</artifactId>
  5.             <version>5.2.10.RELEASE</version>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>junit</groupId>
  9.             <artifactId>junit</artifactId>
  10.             <version>4.12</version>
  11.             <scope>test</scope>
  12.         </dependency>
  13.     </dependencies>
复制代码

  • 创建BookDao,BookDaoImpl,BookService和BookServiceImpl四个类
  1. @Override
  2.     public void save() {
  3.         System.out.println("book dao save");
  4.     }
复制代码
  1. public class BookServiceImpl implements BookService {
  2.     private BookDao bookDao = new BookDaoImpl();
  3.     @Override
  4.     public void save() {
  5.         System.out.println("book service save");
  6.         bookDao.save();
  7.     }
  8. }
复制代码

  • 在配置文件中完成bean的配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.     <!--配置bean-->
  6.     <!--
  7.       bean标签表示配置bean
  8.       id属性表示给bean起名字
  9.       class属性表示给bean定义类型
  10.       得是具体的实现类而不是接口,要靠这个造对象的
  11.       -->
  12.     <bean id="bookDao" class="com.yolo.dao.impl.BookDaoImpl"/>
  13.     <bean id="bookService" class="com.yolo.service.impl.BookServiceImpl"/>
  14. </beans>
复制代码

  • 获取IOC容器并从容器中获取对象进行方法调用
    利用getBean(String name)方法,其name参数就是我们在bean配置的id,通过这个id来造对象
  1. public class APP {
  2.     public static void main(String[] args) {
  3.         // 获取IOC容器
  4.         ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
  5.         // 获取bean对象
  6. //        BookDao bookDao = (BookDao) ac.getBean("bookDao");
  7.         // 获取到对象后就调用对象方法
  8. //        bookDao.save();
  9.         BookService bookService = (BookService) ac.getBean("bookService");
  10.         bookService.save();
  11.     }
  12. }
复制代码
运行结果

05-DI入门案例

DI入门案例重要介绍:Spring到底是怎样来实现DI的
思路分析


  • 要想实现依赖注入,必须要基于IOC管理Bean

    • DI的入门案例要依赖于前面的IOC入门案例

  • Service中利用new情势创建的Dao对象是否保留?

    • 不保留,如许才能解耦合,终极要利用IOC容器中的bean对象(因为只要有new的实现类,耦合度肯定高)

  • Service中需要的Dao对象怎样进入到Service中?

    • 在Service中提供一个方法(比方提供一个set方法),让Spring的IOC容器可以通过该方法传入bean对象,也就到达了不是本身new,而是外部提供

  • Service与Dao之间的关系怎样描述?

    • 利用配置文件

代码实现

需求:基于IOC入门案例,在BookServiceImpl类中删除new对象的方式,利用Spring的DI完成Dao层的注入

  • 删除业务层中利用new的方式创建的dao对象
  1. // 删除业务层中使用new的方式创建的dao对象
  2.         // private BookDao bookDao = new BookDaoImpl();
  3.     private BookDao bookDao;
复制代码

  • 在业务层提供BookDao的setter方法
    我们在set方法中加一条输出语句,看看是否被调用了
  1. public void setBookDao(BookDao bookDao) {
  2.         this.bookDao = bookDao;
  3.         System.out.println("set方法被容器调用啦");
  4.     }
复制代码

  • 在配置文件中添加依赖注入的配置
  1.         <bean id="bookDao" class="com.yolo.dao.impl.BookDaoImpl"/>
  2.     <!--主要变化在这里-->
  3.     <bean id="bookService" class="com.yolo.service.impl.BookServiceImpl">
  4.         <!--配置server与dao的关系-->
  5.         <!--
  6.             property标签表示配置当前bean的属性
  7.             name属性表示配置哪一个具体的属性(这里是配置bookService的bookDao属性)
  8.             ref属性表示参照哪一个bean(参照当前配置文件中的bookDao)
  9.         -->
  10.         <property name="bookDao" ref="bookDao"/>
  11.     </bean>
复制代码
留意:配置中的两个bookDao的含义是不一样的
   name=”bookDao”中bookDao的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前面加set找对应的setBookDao()方法进行对象注入
ref=”bookDao”中bookDao的作用是让Spring能在IOC容器中找到id为bookDao的Bean对象给bookService进行注入
  


  • 运行程序调用方法
    运行结果


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表