spring知识点回顾

1. ioc

  1. 控制:指的是对象创建(实例化、管理)的权利 反转:控制权交给外部环境了(spring框架、IoC容器)
  2. IoC解决对象之间的耦合问题
  3. DI:Dependancy Injection(依赖注⼊)IOC和DI描述的是同⼀件事情,只不过⻆度不⼀样

2. aop

  1. ⾯向切⾯编程/⾯向⽅⾯编程AOP是OOP的延续
  2. 在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复

3. Spring IOC 应⽤

  1. ioc的启动方式(纯xml,xml+注解)
    javaSe:new classPathXmlApplicationContext(bean.xml),new FileSystemXmlApplicationContext(bean.xml)
    javaWeb:javaWeb ContextLoaderListener(监听器)
  2. ioc启动方式(纯注解)
    javaSe :new AnnotationconfigApplicationContext(SpringConfig.class)
    javaWeb :ContextLoaderListener(监听器去加载注解配置类)
  3. BeanFactory与ApplicationContext区别
    BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的⾼级接⼝,⽐BeanFactory要拥有更多的功能,⽐如说国际化 ⽀持和资源访问(xml,java配置类)
  4. Bean的⽣命周期
    单例模式的bean对象⽣命周期与容器相同
    多例模式的bean对象,spring框架只负责创建,不负责销毁
  5. Bean标签属性
    factory-bean属性:⽤于指定创建当前bean对象的⼯⼚bean的唯⼀标识。当指定了此属性之后,
    class属性失效。
    factory-method属性:⽤于指定创建当前bean对象的⼯⼚⽅法,如配合factory-bean属性使⽤,
    则class属性失效。如配合class属性使⽤,则⽅法必须是static的
    scope属性:⽤于指定bean对象的作⽤范围。通常情况下就是singleton。当要⽤到多例模式时,
    可以配置为prototype。
    init-method属性:⽤于指定bean对象的初始化⽅法,此⽅法会在bean对象装配后调⽤。必须是
    ⼀个⽆参⽅法。
    destory-method属性:⽤于指定bean对象的销毁⽅法,此⽅法会在bean对象销毁前执⾏。它只
    能为scope是singleton时起作⽤
  6. 纯注解模式
    @Configuration 注解,表名当前类是⼀个配置类
    @ComponentScan 注解,替代 context:component-scan
    @PropertySource,引⼊外部属性配置⽂件
    @Import 引⼊其他配置类
    @Value 对变量赋值,可以直接赋值,也可以使⽤ ${} 读取资源配置⽂件中的信息
    @Bean 将⽅法返回对象加⼊ SpringIOC 容器

4. Spring IOC⾼级特性

  1. lazy-Init 延迟加载 :设置 lazy-init 为 true 的 bean 将不会在 ApplicationContext 启动时提前被实例化,⽽是第⼀次向容器通过getBean 索取 bean 时实例化的
  2. 应⽤场景
    开启延迟加载⼀定程度提⾼容器启动和运转性能
    对于不常使⽤的 Bean 设置延迟加载,这样偶尔使⽤的时候再加载,不必要从⼀开始该 Bean 就占⽤资源
  3. FactoryBean 和 BeanFactory
    BeanFactory接⼝是容器的顶级接⼝,定义了容器的⼀些基础⾏为,负责⽣产和管理Bean的⼀个⼯⼚,具体使⽤它下⾯的⼦接⼝类型
    FactoryBean可以⽣成某⼀个类型的Bean实例(返回给我们),也就是说我们可以借助于它⾃定义Bean的创建过程
  4. BeanPostProcessor后置处理器
    BeanPostProcessor在BeanFactory初始化之后可以使⽤BeanFactoryPostProcessor进⾏后置处理做⼀些事情
    BeanFactoryPostProcessor 在Bean对象实例化(并不是Bean的整个⽣命周期完成)之后可以使⽤BeanPostProcessor进⾏后置处理做⼀些事情
    注意:对象不⼀定是springbean,⽽springbean⼀定是个对象
  5. BeanFactoryPostProcessor
    BeanFactoryPostProcessor BeanFactory级别的处理,是针对整个Bean的⼯⼚进⾏处理,典型应⽤:PropertyPlaceholderConfigurer
  6. BeanDefinition对象
    我们在 XML 中定义的 bean标签,Spring 解析 bean 标签成为⼀个 JavaBean,这个JavaBean 就是 BeanDefinition
    注意:调⽤ BeanFactoryPostProcessor ⽅法时,这时候bean还没有实例化,此时 bean 刚被解析成BeanDefinition对象

5. BeanFactory 容器继承体系(Spring IoC容器初始化主流程)

  1. // 第⼀步:刷新前的预处理
prepareRefresh();
  1. //第⼆步:获取BeanFactory;默认实现是DefaultListableBeanFactory加载BeanDefition 并注册到 BeanDefitionRegistry
ConfigurableListableBeanFactory beanFactory =obtainFreshBeanFactory();
  1. //第三步:BeanFactory的预准备⼯作(BeanFactory进⾏⼀些设置,⽐如context的类加载器等)
prepareBeanFactory(beanFactory);
  1. // 第四步:BeanFactory准备⼯作完成后进⾏的后置处理⼯作
postProcessBeanFactory(beanFactory);
  1. // 第五步:实例化并调⽤实现了BeanFactoryPostProcessor接⼝的Bean
invokeBeanFactoryPostProcessors(beanFactory);
  1. // 第六步:注册BeanPostProcessor(Bean的后置处理器),在创建bean的前后等执⾏
registerBeanPostProcessors(beanFactory);
  1. // 第七步:初始化MessageSource组件(做国际化功能;消息绑定,消息解析);
initMessageSource();
  1. // 第⼋步:初始化事件派发器
initApplicationEventMulticaster();
  1. // 第九步:⼦类重写这个⽅法,在容器刷新的时候可以⾃定义逻辑
onRefresh();
  1. // 第⼗步:注册应⽤的监听器。就是注册实现了ApplicationListener接⼝的监听器bean
registerListeners();
  1. 第⼗⼀步:初始化所有剩下的⾮懒加载的单例bean初始化创建⾮懒加载⽅式的单例Bean实例(未设置属性)填充属性初始化⽅法调⽤(⽐如调⽤afterPropertiesSet⽅法、init-method⽅法)调⽤BeanPostProcessor(后置处理器)对实例bean进⾏后置处*/
finishBeanFactoryInitialization(beanFactory);
  1. 第⼗⼆步:完成context的刷新。主要是调⽤LifecycleProcessor的onRefresh()⽅法,并且发布事件 (ContextRefreshedEvent)*/
finishRefresh();

6. Spring IoC循环依赖问题

  1. 单例 bean 构造器参数循环依赖(⽆法解决) prototype 原型 bean循环依赖(⽆法解决)
  2. 单例bean通过setXxx或者@Autowired进⾏循环依赖
    ClassA调⽤setClassB⽅法,Spring⾸先尝试从容器中获取ClassB,此时ClassB不存在Spring容器中
    Spring容器初始化ClassB,同时也会将ClassB提前暴露到Spring容器中
    ClassB调⽤setClassA⽅法,Spring从容器中获取ClassA ,因为第⼀步中已经提前暴露了ClassA,因此可以获取到ClassA实例
    ClassA通过spring容器获取到ClassB,完成了对象初始化操作。
    这样ClassA和ClassB都完成了对象初始化操作,解决了循环依赖问题。

7. Spring AOP 应⽤

  1. AOP本质::在不改变原有业务逻辑的情况下增强横切逻辑,横切逻辑代码往往是权限校验代码、⽇志代码、事务控制代码、性能监控代码
  2. AOP 术语 Joinpoint(连接点) Pointcut(切⼊点) Advice(通知/增强) Target(⽬标对象) Proxy(代理) Weaving(织⼊) Aspect(切⾯)
  3. Spring中AOP的代理选择
    Spring 实现AOP思想使⽤的是动态代理技术
    默认情况下,Spring会根据被代理对象是否实现接⼝来选择使⽤JDK还是CGLIB。当被代理对象没有实现任何接⼝时,Spring会选择CGLIB。当被代理对象实现了接⼝,Spring会选择JDK官⽅的代理技术,不过我们可以通过配置的⽅式,让Spring强制使⽤CGLIB。
  4. XML 模式
    第⼀步:把通知Bean交给Spring管理
    第⼆步:使⽤aop:config开始aop的配置
    第三步:使⽤aop:aspect配置切⾯
    第四步:使⽤对应的标签配置通知的类型
  5. 注解模式
@Configuration
	@ComponentScan("com.lagou")
	@EnableAspectJAutoProxy //开启spring对注解AOP的⽀持
	public class SpringConfiguration {
	}
  1. Spring 声明式事务的⽀持
    编程式事务:在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务
    声明式事务:通过xml或者注解配置的⽅式达到事务控制的⽬的,叫做声明式事务
    事务的四⼤特性
    原⼦性(Atomicity)
    ⼀致性(Consistency)
    隔离性(Isolation)
    持久性(Durability)
    事务的隔离级别
    脏读
    幻读
    不可重复读
    事务的传播⾏为
    PROPAGATION_REQUIRED 如果当前没有事务,就新建⼀个事务,如果已经存在⼀个事务中,加⼊到这个事务中。这是最常⻅的选择。
    PROPAGATION_SUPPORTS ⽀持当前事务,如果当前没有事务,就以⾮事务⽅式执⾏。
  2. Spring声明式事务控制声
    @EnableTransactionManagement
    手写ioc框架地址
    https://gitee.com/zl1002/homework.git
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHAOLIANG__________

谢谢大佬

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值