机器人论坛
直播中

张建

7年用户 216经验值
私信 关注
[问答]

Spring笔记分享

  • 框架:
    • 高度抽取,可重用代码的一种设计
    • 高度的通用性
    • 多个可重用模块的集合,形成某个领域的整体解决方案
  • Spring => 容器框架
    • 包含并管理应用对象的生命周期
    • IOC和SOP容器框架
    • 容器 => 可以管理所有的组件(类)
    • Spring的优良特性
      • 1) 非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API
      • 2) 依赖注入:DI——Dependency Injection,反转控制(IOC)最经典的实现。
      • 3) 面向切面编程:Aspect Oriented Programming——AOP
      • 4) 容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
      • 5) 组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。
      • 6) 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)
    • Spring Framework
  • Spring源码包
    • 三个一组:
    • Spring的模块划分
      • 用哪个模块导哪个包


  • eclipse的插件安装
    • IDE:eclipse或者IDEA

回帖(1)

蔡鼎瑾

2020-11-4 11:38:17
P2.IOC

C1.概述




  • Inversion Of Control


    • 主动式 => 要什么资源自己new

    • 被动式 => 资源的获取不是我们自己创建,而是交给一个容器来创建和设置


    • 复杂对象的创建是非常庞大的工程

    • 容器可以自动探查出哪些组件(类)需要用到另一些组件
    • 容器帮我们创建BookService对象,并把BookService对象赋值过去



    • 容器 => 管理所有的组件(有功能的类)

    • 所有资源的创建及销毁都交给容器来做

    • 控制反转 => 由主动的创建资源变成被动地接收资源
    • 控制:资源的获取方式



  • DI(Dependency Injection)



    • 注入 => 利用反射给属性赋值

    • 容器能知道哪个组件(类)运行的时候需要另外一个类(组件)
    • 容器通过反射形式,将容器中准备好的BookService对象注入到BookServlet中

    • 只要是容器管理的组件,都能使用容器提供的强大功能


C2.HelloWorld



  • 以前是自己new对象,现在所有的对象都交给容器创建
  • 给容器中注册组件
  • 编写框架流程:



    • spring的配置文件中,集合了spring的ioc容器管理的所有组件
    • 要先导包再写配置文件,否则会出错

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

           
           
           
               
               
               
               
           




    • 核心容器:

    • 日志包 => 没有就报错


    • spring-beans-4.0.0.RELEASE.jar
    • spring-context-4.0.0.RELEASE.jar
    • spring-core-4.0.0.RELEASE.jar
    • spring-expression-4.0.0.RELEASE.jar

    • commons-logging-1.1.3.jar



    • step1.导包

    • step2.写配置

    • step3.测试
      package xqy.test;

      import org.junit.Test;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;

      import xqy.bean.Person;

      public class IOCTest {

           @Test
           public void test() {
               // ApplicationContext => 代表ioc容器
               ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml");
               Person bean = (Person) ioc.getBean("p1");
               System.out.println(bean);
           }

      }


C3.散碎知识



  • src => 源码开始的路径,称为类路径的开始



    • 所有源码包的东西都会合并放在类路径里面
    • Java项目的源路径 => /bin/
    • JavaWeb项目的源路径 => /WEB-INF/classes/





  • 容器中对象在容器创建(启动)完成时就已经创建好了
  • 同一个组件在ioc中是单实例的
  • 容器中如果没有这个组件,获取组件 => 报异常


    • NoSuchBeanDefinitionException


  • ioc容器在创建这个组件的对象时,会利用setter、getter方法对JavaBean的属性进行赋值
  • 名称空间:在xml中名称空间用于防止标签重复
  • 源码文件夹和普通文件夹


    • bin文件夹 => 运行的类路径的开始 => jdk运行只看bin文件夹
    • eclipse看的是其他文件夹

    • 项目的编译后的代码都放在bin文件夹下

    • 配置文件要放在源码文件夹中
    • 普通文件夹在工程中没有作用


  • 也可以把别人的组件加载到自己的ioc容器中


    • 使用bean配置


  • ioc是一个容器,帮我们管理所有的组件



    • 依赖注入 => @Autowired,自动赋值
    • 某个组件要使用spring提供的功能(IOC、AOP)必须加入到容器中




  • 容器启动 => 创建所有单实例bean
  • @autowired自动装配的时候,是从容器中找到这个符合要求的bean
  • ioc.getBean("bookServlet")也是从容器中找到这个bean
  • 容器中包括了所有的bean




  • 容器的实质 => 一个map



    • 这个map保存所有创建好的bean,并提供外界获取功能




  • 源码调试的思路



    • 给helloWorld的每一个关键步骤都打断点,进去看里面做了什么工作
    • 1) 翻译方法是做什么的
    • 2) 放行这个方法,看控制台或看debug每一个变量的变化
    • 3) 看方法名、注释


C4.静态工厂与实例工厂



  • bean的创建,默认就是框架利用反射new出来的bean实例
  • 工厂模式:工厂帮我们创建对象


    • 有一个专门帮我们创建对象的类


  • 静态工厂


    • 工厂本身不用创建对象,通过静态方法调用
    • 对象=工厂类.工厂方法名();


  • 实例工厂



    • 工厂本身需要创建对象
    • 对象=new 工厂类().工厂方法名();




     





     






  • 实现FactoryBean的工厂


    • FactoryBean是Spring规定的一个接口
    • 只要是实现了这个接口的实现类,Spring都认为是一个工厂
    • 工厂类
    • Spring会自动调用工厂方法创建实例
    • 不论是单实例还是多实例,容器创建的时候不会创建实现类的实例,在获取的时候才创建对象

举报

更多回帖

发帖
×
20
完善资料,
赚取积分