Spring

Spring

核心组成模块:

        1.spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能
        2.spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean
        3.spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法
        4,spring jdbc:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析, 用于简化JDBC
        5.spring aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等
        6.spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext
        7.spring test:主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试

设计模式:工厂模式,单例模式,代理模式,模块模式,观察者模式

IOC:控制反转,即将代码的控制权交给spring容器,让spring容器去进行管理,本质上是工厂模式和反射机制的使用

DI:依赖注入,有spring容器去动态的将依赖关系的对象注入到各种关联组件中

        实现方式:接口注入,Setter方法注入,构造器注入

Bean的作用域:singleton,prototype,request,seesion,global-seesion

spring如何处理并发问题:使用ThreadLocal,对每个线程提供一个独立的变量副本,这样每个线程对变量的访问操作都不会影响到其他线程的独立变量,一次也无需对变量进行同步

Bean的生命周期:

        bean的实例化阶段

        bean的设置属性阶段

        bean的初始化阶段

        bean的销毁阶段

在bean的初始化阶段,有一个BeanPostProcessor接口,会在初始化前后都调用,在设置属性阶段结束后,调用BeanPostProcessorBeforeInitialization方法之前,会按照顺序执行一系列Aware类型的接口

  1. BeanNameAware
  2. BeanClassLoaderAware
  3. BeanFactoryAware
  4. EnvironmentAware
  5. ResourceLoaderAware
  6. ApplicationEventPublisherAware
  7. ApplicationContextAware

会依次判断是否执行了该接口,如果执行了则调用改接口的set方法进行配置,然后再初始化

spring的一些注解:@Component,@Controller,@Service,@Autowired,@Resource,@Qualifier,@RequestMapping

@Autowired:通过类型进行匹配,适合Spring

@Resource:默认根据名称进行匹配,再通过类型进行匹配,适合Java SE,也是有J2EE提供

@Component:把对象注入到spring容器中

@Configuration:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象

AOP:面向切面编程,私以为是在不破坏原有代码的情况下,添加跟代码业务无关的功能,然后对多个对象都产生了影响,且可以多次复用,一般用于权限认证,日志,事务处理等等,其本质是代理模式

过滤器:servlet接受请求之后,调用之前使用的,通过web.xml进行配置,依赖于servlet容器,只能操作request跟response

拦截器:servlet调用之后使用的,通过spring文件或者注解(AOP)的方式进行配置,不依赖于servlet容器,可以操作request,response,handler,modeAndView和exception

代理模式:在访问实际对象时,实际上是通过代理对象去访问实际对象,而我们可以在代理对象中添加一些其他的操作,这就是代理模式的本质

静态代理:由程序员编写,或者特定程序生成的,在程序运行之前,已经编译成class文件,但是因此静态代理是固定的,无法对所有的代理类进行统一的处理

动态代理:

        JDK动态代理:InvocationHandler接口实现Invoke方法反射调用目标类中的代码,然后Proxy利用InvocationHandler动态创建符合接口的实例,生成目标类的代理对象

        CGLIB动态代理:通过继承的方法,当目标没有实现InvocationHandler接口时,指定一个类的子类进行覆盖其中的方法并增强代码

SpringMVC

工作流程:

        1、用户发送请求至前端控制器DispatcherServlet;
        2 、DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
        3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
        4、DispatcherServlet 调用 HandlerAdapter处理器适配器;
        5、HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
        6、Handler执行完成返回ModelAndView;
        7、HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
        8、DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
        9、ViewResolver解析后返回具体View;
        10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
        11、DispatcherServlet响应用户

SpringBoot

核心注解和自动装配原理:

@SpringBootApplication包含了三个注解,@SpringBootConfiguration和@ComponentScan保证了配置和扫描的作用,@EnableAutoConfiguration开启了自动装配。@EnableAutoConfiguration也是一个派生注解,其中的关键功能由@Import实现,其导入的AutoConfigurationImportSelector的selectImpoet()方法,通过SpringFactoriesLoader.loadFactoryNames()方法,去扫描META-INF下的spring.factories文件中所有后缀为EnableAutoConfiguration的配置项所对应的文件,进行自动装配

MyBatis

${}和#{}的区别:${}是拼接符,安全性低,容易出现SQL注入问题,#{}是占位符,会进行预编译处理,安全性高,不会出现SQL注入问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值