Spring学习笔记

Spring学习笔记

Spring概述

Spring简介

​ Spring是分层的全栈轻量级开源框架,以IoC和AOP为内核,提供了展现层Spring MVC和业务层事务管理等众多企业级应用技术,还能整合众多优秀的第三方开源框架和类库,已经成为使用最多的JavaEE企业级应用开源框架

Spring的优势

  • 方便解耦,简化开发

    通过Spring提供的IoC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度依赖程序耦合,用户也不必为单列模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用

  • AOP编程

    方便面向切面编程,许多不容易用传统OOP实现的功能可以通过AOP轻松实现

  • 声明式事务

    @Transactional可以将我们从单调的事务管理代码中解脱出来,通过声明式事务方式,灵活的进行事务管理,提供开发的效率和质量

  • 方便程序测试

    可以用非容器的方式进行几乎所有的测试工作,测试不在是昂贵的操作,而是随手可做的事情

  • 方便集成各种优秀的框架

    Spring可以降低各种框架的使用难度,提供了各种优秀框架的直接支持

  • 降低JAVAEE API的使用难度

    Spring对javaEE API进行了封装,使这些API的使用难度大大降低

  • 源码是经典的Java学习范例

Spring核心思想

Ioc和AOP不是Spring提出来的,只不过Spring对其进行了很好的实现

IoC

什么是IoC

控制反转:他是一个技术思想,不是一个技术实现

描述的事情:Java开发领域里,对象的创建管理问题

  • 传统开发方式:比如类A依赖类B,往往会在类A中new一个对象
  • IoC思想下开发:
    • 我们不需要new对象,二十通过IoC容器(Spring框架)去帮助我们实例话对象并管理它,我们需要那个对象,直接从IoC容器中拿即可;
    • 缺点:我们丧失了创建和管理对象的权力
    • 优点:我们不需要考虑对象的创建和管理等问题
为什么叫控制反转?
  • 控制
    • 指对象的创建的权利
  • 反转:
    • 控制权交给外部环境(IoC容器、Spring 框架)
IoC解决了什么问题?

​ IoC解决了对象的耦合问题

IoC和DI的区别

DI:依赖注入

  • IoC和DI描述的是同一件事情,只不过角度不同

  • 描述的是对象创建和管理问题(对象实例化及依赖关系维护)

  • IOC:站在对象的角度,对象实例化及管理的权力交给了容器

  • DI是站在容器的角度:容器会把对象依赖的其他对象注入到该对象中,比如A对象在创建过程中,依赖了B对象,则容器需要把B对象注入到A对象中

AOP

什么是AOP?
  • AOP:Aspect oriented Programing
    • AOP是OOP的延续,OOP有3大特征:
      • 封装、继承、多态
      • OOP是纵向垂直的体系
      • OOP编程思想可以解决大多数代码重复问题,但是有一些情况是处理不了的。比如在顶级父类中的多个方法中,相同位置出现了重复代码,OOP就解决不了,比如:方法开头日志打印,这部分代码被成为横切逻辑代码
      • 横切逻辑代码的应用场景:事务控制、权限校验、日志…
    • 横切逻辑代码存在的问题:
      • 横切逻辑代码重复
      • 横切逻辑代码和业务逻辑代码混淆在一起
    • AOP出场:
      • Aop另辟蹊径,将横切逻辑代码和业务代码分离
      • 代码拆分容易,那么怎么在不修改业务逻辑的基础下,悄无声息的把横切逻辑代码应用到原有的业务逻辑中,道道和原来一样的效果,这个是比较难的
AOP解决什么问题?

​ 在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦,避免横切逻辑代码重复

为什么叫做面向切面编程?

​ 切:指的是在不修改业务逻辑代码的情况下,只能修改逻辑代码,所以叫面向横切逻辑

​ 面:横切逻辑代码往往要影响多个方法,每一个方法都如同一个点,多个点构成面,有一个面的概念在里面

Spring IoC基础

BeanFactory和ApplicationContext的区别?

​ BeanFactory是Spring框架中IoC容器的顶层接口,它只是定义了一些基础的功能和一些基础的规范。而ApplicationContext是他的一个子接口,所以ApplicationContext是具备BeaFactory提供的全部功能的。

​ 通常,我们城BeanFactory为SpringIOC的基础容器,Appli cationContext是容器的高级接口,比BeanFactory要拥有更多的功能,比如说国际化支持和资源访问(xml,java配置类等等)

Bean实例化的三种方式
  • 构造方法

    <bean id="connectionUtils" class="com.xxx.ConnectionUtils"></bean>
    
  • 静态方法

    <bean id="connectionUtils" class="com.xxx.CreateBeanFactory" factory-method="createConnectionUtils">
    
  • 实例方法

    <bean id="createBeanFactory" class="com.xxx.CreateBeanFactory"></bean>
    <bean id="connectionUtils" factory-bean="createBeanFactory" factory-method="createConnectionUtils">
    
Bean的作用范围和生命周期
  • singleton单例
    • 对象出生:容器创建,对象创建
    • 对象活着:容器在,对象一直活着
    • 对象死亡:容器销毁,对象销毁
  • prototype 原型
    • 对象出生:当使用对象时,创建新的对象
    • 对象活着:只要对象在使用,就一直活着
    • 对象死亡:当对象长时间不使用时,被java的垃圾回收机制收回
DI依赖注入
  • 依赖注入分类
    • set方法注入
    • 构造方法注入
启动IOC容器的方式
  • Java环境下启动IoC容器、

    • ClassPathXmlApplicationContext:从类路径下加载配置文件
    • FileSystemXmlApplicationContext:从磁盘路径上加载配置文件
    • AnnotationConfigApplicationContext:纯注解模式下启动Spring容器
  • Web容器下启动IoC容器:

    • 从xml中启动
    <web-app>
        <!--配置Spring IoC容器-->
     	<context-param>    
     		<param-name>contextConfigLocation</param-name>    
    		<param-value>classpath:applicationContext.xml</param-value> 
    	</context-param> 
        <!--使用监听器启动SpringIOC容器-->
    	<listener>   				<listenerclass>org.springframework.web.context.ContextLoaderListener</listenerclass> 	</listener>
     </web-app>
    
    
    • 从配置类启动容器

      <web-app> 
      <context-param> 
      <!--配置使用注解方式启动IOC容器-->
      <param-name>contextClass</param-name>    		<paramvalue>org.springframework.web.context.support.AnnotationConfigWebAppli cationContext
      </param-value>  
      </context-param>
       <!--配置注解的全限定类名-->
      <context-param>    
       	<param-name>contextConfigLocation</param-name>    
      	<param-value>com.xxx.xxx.SpringConfig</param-value> 
      </context-param>  
      <!--使用监听器启动SpringIOC容器-->
      <listener>   				
          <listenerclass>
      		org.springframework.web.context.ContextLoaderListener
       	</listenerclass> 	
       </listener>
      </web-app>
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值