Spring知识点

Spring是一个轻量级的控制反转和AOP对象容器框架,控制反转指的是把对象的控制权交给spring管理。

什么是IOC? (实现思想)
IOC(控制反转):传统方式中一个对象的使用需要自己new出来,并通过一系列的set get方法来控制,IOC中由第三方(Spring)来管理这些对象的生命周期

什么是DI? (实现方式)
依赖注入,对象在被创建后,里面的属性需要被set,get,由Spring来做这些工作,就是DI

优点有:

  1. 简化开发,方便解耦
  2. 支持AOP编程
  3. 支持声明式的事务
  4. 便于测试
  5. 便于集成其他框架

AOP:开闭原则

applicationContext.xml:
配置文件中配置了一些bean,也就是容器中的对象。

依赖注入:

  1. 构造器注入:通过配置文件(constructor-arg),构造器配置,由Spring来在对象创建时,通过构造方法注入属性值
  2. 属性注入:通过设置属性(property),使用时会调用set方法

对象的作用域(生命周期,在bean标签的scope中设置):
Spring提供了6种作用域:

  1. singleton:单例的
  2. prototype:不是单例的,每次创建一个新对象
  3. websocket:基于连接单例的
  4. Request:一个请求一个单例对象
  5. session:一个用户登录一个单例对象
  6. application:一个应用一个单例对象

默认是singleton,Spring创建的对象都是单例的,同一个对象的hashCode一致

Spring的循环引用:
Spring可以检查到循环引用的现象,不允许在非单例模式下进行循环引用,在默认的单例模式下是允许的
实现原理:prototype情况下,如果一个对象在被实例化的时候发现有引用对象没有实例化,则会等待引用对象被实例化
如果是singleton情况下,则会直接实例化,不进行检查

depends-on属性,会先创建引用的对象
Spring的懒加载:
lazy-init,bean在被使用的时候才被创建

Spring的自动注入:

  1. 使用autowire标签,分为byName和byType两种,默认不自动装配
  2. 使用注解@Component注册到Spring容器中,相当于配置文件里的,引用时再使用@Autowired自动注入(需要配置扫描的路径),默认使用type注入,如果需要两个相同接口的不同实现类,名称不同,需要配合@Qualifier注明是注入哪一个实现类
  3. 修改对象的作用域可以使用@scope注解
  4. 设置属性默认值可以使用@Value注解

其他注解:

  1. @Controller
  2. @Service
  3. @Resource

发表评论

电子邮件地址不会被公开。 必填项已用*标注