Java-Spring

Spring

IoC、DI与AOP

IoC

  • IoC是一种设计思想,将原本在程序中手动创建对象的控制权,交由Spring框架来管理,IoC容器是spring用来实现IoC的载体,IoC容器实际上是个Map,存放各种对象
  • 将对象之间的相互依赖关系较给IoC容器管理,由IoC容器完成对象的注入,很大程度简化应用的开发,IoC容器就像一个工厂,当我们需要创建一个对象时,只需要配置好配置文件告诉容器需要什么类型的对象,完全不用考虑对象是如何被创建出来的
    一般通过XML配置文件来配置Bean,选择大部分使用注解配置

DI

  • 依赖注入,IoC的一种实现方式

AOP

  • 面向切面编程,能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理,日志管理,权限控制等)封装起来,减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性
  • 基于动态代理实现,如果需要代理的对象实现了某个接口,则会使用JDK Proxy去创建代理对象
    对于没有实现接口的对象,则使用Cglib生成一个被代理对象的子类来作为代理

Bean

bean的获取

  • 通过BeanFactory

    • 采用的是延迟加载的形式,即只有在使用某个Bean的时候(调用getBean()),才对该bean进行加载实例化,但这样不能及时发现配置文件中的错误
  • 通过ApplicationContext

    • 由beanfactory接口派生而来的
    • 在启动容器上,applicationContext会容器启动时一次性创建所有的bean,这样在容器启动时就可以发现配置文件中的错误

bean的作用域

  • singleton,唯一bean实例,spring中的bean默认都是单例的
  • prototype,每次请求都i会创建一个新的benan实例
  • request,每一次http请求都会产生一个新的bean,该bean尽在当前http request内有效
  • session,每一次http请求都会产生一个新的bean,该bean尽在当前httpsession内有效
  • glabal-session,全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没了

单例bean的线程安全问题

  • 存在安全问题,当多个线程操作同一个对象的时候,对这个对象的成员变量的写操作会存在线程安全问题

  • 解决方法

    • 在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中
    • 改变bean的作用域prototype,每次请求都会创建一个新的bean实例,各bean之间不会相互影响,自然不会存在线程安全问题

@Component和@Bean的区别

  • @Component注解作用与类,通常是通过路径扫描来自动侦测以及自动装配Spring容器中(@ComponentScan后跟路径名)
  • @Bean注解作用于方法,告诉Spring这是某个类的实例,当有需要的时候返回这个实例对象,@Bean的自定义性更强,当我们引用第三方库中的类需要装配到spring容器时,只能通过@bean来实现

将一个类声明为bean的注解有哪些

  • @Component,通过注解,可标注任意类为spring组件,如果不确定当前bean是属于哪个层,可以使用@Component注解标注
  • @Repositoy,对应持久层即Dao层,主要用于数据库相关操作
  • @Service,对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层
  • @Controller,对应SpringMVC控制层,主要用于接收用户请求并调用service层返回数据给前端页面

Spring MVC

SPringMVC是什么

  • MVC是一种设计模式,SpringMVC是一款优秀的MVC框架,帮助我们进行更简洁的Web层开发,将后端项目分为service层(处理业务)Dao层(数据库操作)entity层(实体层)controller层(控制层返回数据给前端页面

SpringMVC的工作流程

  • 客户端接受请求,直接发送到DispatcherServlet(前端控制器)
  • 前端控制器根据请求信息调用HandlerMapping(处理映射器),解析请求对应的Handler
  • 解析到了对应的Handler(也就是对应controller控制器)后,开始由HandlerAdapter(处理适配器)处理
  • 处理适配器会根据Handler来调用真正的处理器来处理请求,并处理相应的业务逻辑
  • 处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View
  • 视图解析器ViewResolver会根据逻辑View查找实际的View
  • 前端控制器把返回的Model传给View(视图渲染)
  • 把View返回给请求者(浏览器)

Spring框架中用到了哪些设计模式

工厂设计模式

代理设计模式

单例设计模式

模板方法模式

包装器设计模式

观察者模式

适配器模式

Spring事务

Spring管理事务的方法

  • 编程式事务,在代码中硬编码。不推荐

  • 声明式事务,在配置文件中配置。推荐使用

    • 基于XML的声明式事务
    • 基于注解的声明式事务

XMind - Trial Version

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值