Spring框架

Spring 简介

Spring 是分层的 full-stack(全栈) 轻量级开源框架 以 IoC 和 AOP 为内核 ,提供了展现层 Spring MVC 和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已 经成为使⽤最多的 Java EE 企业应⽤开源框架。
Spring 官⽅⽹址: http://spring.io/
优势:
1.方便解耦,简化开发,通过spring中IOC容器去创建管理bean对象,避免硬编码所造成的过度程序耦合
2.支持AOP编程,通过spring中AOP功能方便面向切面编程,解决了传统OOP非业务代码的跟业务代码的耦合(AOP:日志记录,性能统计,安全控制,事务处理,异常处理等)
3.声明式事务,编码重复编写事务管理的代码,通过声明式事务进行灵活的管理,提高开发效率跟质量(编程式事务和声明式事务)
4.方便测试
5.方便集成各种框架进行快速开发

Spring 的核⼼结构

Spring是⼀个分层⾮常清晰并且依赖关系、职责定位⾮常明确的轻量级框架,主要包括⼏个⼤模块:数据处理模块Web模块AOP(Aspect Oriented Programming)/Aspects模块Core Container模块 Test 模块。

Spring核⼼容器(Core Container 容器是Spring框架最核⼼的部分,它管理着Spring应⽤中 bean的创建、配置和管理。在该模块中,包括了Spring bean⼯⼚,它为Spring提供了DI的功能。 基于bean⼯⼚,我们还会发现有多种Spring应⽤上下⽂的实现。所有的Spring模块都构建于核⼼ 容器之上。

⾯向切⾯编程(AOP)/Aspects Spring对⾯向切⾯编程提供了丰富的⽀持。这个模块是Spring应 ⽤系统中开发切⾯的基础,与DI⼀样,AOP可以帮助应⽤对象解耦。

数据访问与集成Data Access/Integration) Spring的JDBCDAO模块封装了⼤量样板代码,这样可以使得数据库代码变得简洁,也可以更专 注于我们的业务,还可以避免数据库资源释放失败⽽引起的问题。 另外,Spring AOP为数据访问 提供了事务管理服务,同时Spring还对ORM进⾏了集成,如HibernateMyBatis等。该模块由 JDBC、TransactionsORMOXM JMS 等模块组成。

Web 该模块提供了 SpringMVC 框架给 Web 应⽤,还提供了多种构建和其它应⽤交互的远程调⽤⽅
案。 SpringMVC 框架在 Web 层提升了应⽤的松耦合⽔平。
Test 为了使得开发者能够很⽅便的进⾏测试, Spring 提供了测试模块以致⼒于 Spring 应⽤的测
试。 通过该模块, Spring 为使⽤ Servlet JNDI 等编写单元测试提供了⼀系列的 mock 对象实现

核⼼思想

什么是 IoC
        IoC Inversion of Control ( 控制反转 / 反转控制 ) ,注意它是⼀个技术思想,不是⼀个技术实现。
        描述的事情:Java 开发领域对象的创建,管理的问题(把对象的创建,注入,销毁交给IOC容器管理)
为什么叫做控制反转?
        控制:指的是对象创建(实例化、管理)的权利
        反转:控制权交给外部环境了(spring 框架、 IoC 容器)
IoC DI 的区别?
        DI: Dependancy Injection (依赖注⼊)

 什么是AOP?

        AOP: Aspect oriented Programming ⾯向切⾯编程/⾯向⽅⾯编程(AOPOOP的延续)

        OOP三⼤特征:封装、继承和多态(特点:垂直纵向集成体),缺点:比如说日志的打印的话那么每个方法中都会有冗余代码的出现而且会跟业务逻辑没有解耦。

 AOP在解决什么问题

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

为什么叫做⾯向切⾯编程
        「切」:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,所以⾯向横切逻辑
        
        「⾯」:横切逻辑代码往往要影响的是很多个⽅法,每⼀个⽅法都如同⼀个点,多个点构成⾯,有⼀个 ⾯的概念在⾥⾯。

AOP 术语

        

Spring 实现AOP思想使⽤的是动态代理技术 

默认情况下,Spring会根据被代理对象是否实现接⼝来选择使⽤JDK还是CGLIB当被代理对象没有实现任何接⼝时,Spring会选择CGLIB当被代理对象实现了接⼝,Spring会选择JDK官⽅的代理技术。(设置 proxyTargetClass=true强制使⽤Cglib 代理)

​​​​​​​Spring的事务传播机制

事务传播机制实际上是使用简单的ThreadLocal实现的

 

BeanFactoryApplicationContext区别

        BeanFactory是Spring框架中IoC容器的顶层接⼝,它只是⽤来定义⼀些基础功能,定义⼀些基础规范,ApplicationContext是它的⼀个⼦接⼝,所以ApplicationContext是具备BeanFactory提供的全部功能 的。(FactoryBean可以⽣成 某⼀个类型的Bean实例)

spring作用域

        单例模式:singleton(单例模式的bean对象⽣命周期与容器相同)

        多例模式:prototype(多例模式的bean对象,spring框架只负责创建,不负责销毁,对象长时间不使用会被gc回收)

         request:(每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境)

        session:(该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例,也就是一次会话)

        global-session:(该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例)

DI 依赖注⼊的注解实现⽅式

       方式:构造注入,set注入,接口注入(注解的方式)

         @Autowired(推荐使⽤spring的)(byType按照类型注入) 也可以配合使用@Qualififier制定名称

        @Resource(ByName ⾃动注⼊JDK的)

Spring注解有哪些?

@Controller  @RestController  @Service  @RequestMapping  @RequestParam  @Cacheable @CacheEvict  @Repository  @Component  @Scope @Lazy

Spring bean 容器生命周期: 创建对象  属性注入  初始化对象  销毁对象

Spring 容器根据配置中的 bean 定义中实例化 bean。

Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。

处理Aware接口

     如果 bean 实现BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用setBeanName()。

    如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()。

   如果存在与bean关联的任何BeanPostProcessors,则调用preProcessBeforeInitialization() 方法。

如果为 bean 指定了 init 方法( 的 init-method 属性),那么将调 用它。最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法。

如果 bean 实现DisposableBean 接口,当 spring 容器关闭时,会调用 destory()。

如果为bean 指定了 destroy 方法( 的 destroy-method 属性),那么将 调用它。

spring三级缓存

        用来解决spring的循环依赖问题(构造器注入和多例的循环依赖情况下是无法解决的)

        一级缓存singletonObjects(ConCurrentHashMap):用于存放完全初始化好的bean直接从该缓存中取出使用

        二级缓存earlySingletonObjects(HashMap):提前曝光的单例对象,未填充属性存放在该缓存中,用于解决循环依赖的问题

        三级缓存singletonFactories(HashMap):单例对象工厂的缓存,存放bean工厂对象。

spring框架的bean对象是否是线程安全的?

        首先单例对象在无状态下是安全的,在有状态下需要通过编码的方式去控制,在原型模式下是线程安全的

什么是springbeans?

        Springbeans是那些形成Spring应用的主干的java对象。它们被SpringIOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。

补充:会持续完善,欢迎评论跟指点...

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值