Spring的基本概念
Spring是一个轻量级的控制反转和AOP对象容器框架,控制反转指的是把对象的控制权交给spring管理。
什么是IOC? (实现思想)
IOC(控制反转):传统方式中一个对象的使用需要自己new出来,并通过一系列的set get方法来控制,IOC中由第三方(Spring)来管理这些对象的生命周期
什么是DI? (实现方式)
依赖注入,对象在被创建后,里面的属性需要被set,get,由Spring来做这些工作,就是DI
优点有:
- 简化开发,方便解耦
- 支持AOP编程
- 支持声明式的事务
- 便于测试
- 便于集成其他框架
AOP:开闭原则
applicationContext.xml:
配置文件中配置了一些bean,也就是容器中的对象。
依赖注入:
- 构造器注入:通过配置文件(constructor-arg),构造器配置,由Spring来在对象创建时,通过构造方法注入属性值
- 属性注入:通过设置属性(property),使用时会调用set方法
对象的作用域(生命周期,在bean标签的scope中设置):
Spring提供了6种作用域:
- singleton:单例的
- prototype:不是单例的,每次创建一个新对象
- websocket:基于连接单例的
- Request:一个请求一个单例对象
- session:一个用户登录一个单例对象
- application:一个应用一个单例对象
默认是singleton,Spring创建的对象都是单例的,同一个对象的hashCode一致
Spring的循环引用:
Spring可以检查到循环引用的现象,不允许在非单例模式下进行循环引用,在默认的单例模式下是允许的
实现原理:prototype情况下,如果一个对象在被实例化的时候发现有引用对象没有实例化,则会等待引用对象被实例化
如果是singleton情况下,则会直接实例化,不进行检查
depends-on属性,会先创建引用的对象
Spring的懒加载:
lazy-init,bean在被使用的时候才被创建
Spring的自动注入:
- 使用autowire标签,分为byName和byType两种,默认不自动装配
- 使用注解@Component注册到Spring容器中,相当于配置文件里的<bean>,引用时再使用@Autowired自动注入(需要配置扫描的路径),默认使用type注入,如果需要两个相同接口的不同实现类,名称不同,需要配合@Qualifier注明是注入哪一个实现类
- 修改对象的作用域可以使用@scope注解
- 设置属性默认值可以使用@Value注解
其他注解:
- @Controller
- @Service
- @Resource