0%

Spring框架

Spring四种关键策略

  • 基于POJO (plain old java object) 的轻量级和最小侵入性编程
  • 通过依赖注入和面向接口实现松耦合
  • 基于切面和惯例进行声明式编程
  • 通过切面和模板减少样版式代码

依赖注入DI

  • 构造器注入(参数中传入对象)
  • n ID

应用切面

  • 关注点分离
  • beforeMethod
  • afterMethod
  • 在xml声明AOP属性

模板消除样版式代码

  • 使用JDBCTemplate封装JDBC的操作

Spring容器

  • bean工厂(beanFactory)
  • 应用上下文ApplicationContext(AnnotationApplicationConext, pathContext)

Bean生命周期

  • 实例化
  • 值与bean引用注入到bean中
  • 如果实现了BeanNameAware 将Bean传递到SetBeanName()方法中
  • 如果实现了BeanFactoryAwere则将bean工厂传入
  • 如果实现了ApplicationConextAware则将上下文引用传入
  • 如果实现了PostProecess接口则掉调用BeforeInitialization
  • 如果bean实现了InitializaingBean接口,则调用AfterPropertSet()方法
  • 如果AfterInitialization方法
  • disposable销毁

如何装配Bean

  • xml,
  • java显式装配,
  • 自动化装配

自动化装配
组件扫描
自动装备 @component注解,告知Spring创建Bean
@componentScan
@Autowired 可以修饰构造方法,可以修改普通方法,自动装配参数, 接口

Spring设计模式

  • 工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例
  • 单例模式:Bean默认为单例模式
  • 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术
  • 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate
  • 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。

JDK动态代理要求被代理的类必须实现一个接口:InvocationHandler 接口,Proxy newProxyInstance(),java反射
CGLIB通过继承的方式动态代理: cglib.jar, asm.jar。通过MethodInterceptor 接口 Enhancer 类,调用父类,继承的方式实例化

Spring作用域

  • singleton : bean在每个Spring ioc 容器中只有一个实例
  • prototype:一个bean的定义可以有多个实例
  • request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
  • session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
  • global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
  • 注意:* 缺省的Spring bean 的作用域是Singleton。使用 prototype 作用域需要慎重的思考,因为频繁创建和销毁 bean 会带来很大的性能开销。

IOC容器加载过程

  1. 刷新预处理
  2. 将配置信息解析,注册到BeanFactory
  3. 设置bean的类加载器
  4. 如果有第三方想再bean加载注册完成后,初始化前做点什么(例如修改属性的值,修改bean的scope为单例或者多例。),提供了相应的模板方法,后面还调用了这个方法的实现,并且把这些个实现类注册到对应的容器中
  5. 初始化当前的事件广播器
  6. 初始化所有的bean
  7. 广播applicationcontext初始化完成。

Spring Boot

四个特性

  • Spring Boot starter 依赖整合,合并Maven Gradle构建
  • 自动配置,Spring Boot 4对条件化配置的支持,合理推测所需的bean并自动化配置
  • 命令行接口
  • Actuator 管理特性

Spring Boot为不同的Spring模块提供了许多依赖项。一些最常用的是:
spring-boot-starter-data-jpa
spring-boot-starter-security
spring-boot-starter-test
spring-boot-starter-web
spring-boot-starter-thymeleaf