在学习spring的高阶内容时,我们有必要先回顾一下spring
回顾spring
1.什么是spring
spring是轻量级的,指核心jar包时很小的;非侵入式的一站式框架(数据持久层,web层,核心aop),为了简化企业级开发。
核心是IOC,AOP
IOC:控制翻转 把创建对象交给spring框架管理(创建对象与使用对象分离),管理对象的生命周期。
DI:依赖注入 创建对象后,把对象属性赋值,将关联的对象注入
AOP:面向切面编程(对面向对象编程的一个补充,并不是所特有的),通过一个代理对象,在不修改原来代码的情况下,对目标类进行功能的增强;例如事务管理、日志等
简化了开发,使得类与类之间的耦合度降低了,简化了开发步骤。
2.spring中Bean管理
1.在xml中配置
2.使用注解
如@Component包括@controller、@service、@Repesitory等标签用来声明bean的注解,即这些对象交由spring管理;
依赖注入/自动注入
@Autowired spring中提供的,支持类型,对象名查找,通过这个标签可以使用对象;
@Resource jdk提供的,支持类型,对象名查找
3.spring JdbcTemplate
4.AOP
连接点,切入点,切面,通知(前置通知,后置通知、异常通知、返回通知、最终通知、 环绕通知),代理,置入
xml实现,注解实现
5.Spring事务管理
添加一个事务管理器
事务方式:
1.编程式 在代码中自己开启,自己提交,回滚
2.声明式 @Transactional 修饰方法、类
声明式事务失效的场景
事务传播行为:是spring框架对事务的一个额外的增强,A方法调用了B方法,B方法应该怎么做
6.集成Mybatis
7.SpringWeb
流程:请求到来后,先到达DispacherServlet捕获,它是前端控制器,springweb核心,用来接收所有前端发送的请求统一进行分发调度。然后到映射处理器handerMapper,他专门对地址url进行解析,检测当前地址有没有配置处理器/拦截器,若有则返回给前端控制器dispatcherServlet一个handler处理器对象,然后前端控制器根据获得的handler对象,选择合适的处理适配器HandlerAdapter,此时在填充handler的入参过程中,它会根据要求对请求中数据进行组装,然后执行处理器中的业务代码(controller),完成后将响应数据响应到前端json类型,只需return即可。
BeanFactory 和ApplicationContext
它们都是接口
BeanFactory
BeanFactory接口是spring框架顶层的接口之一,是IOC容器的最基础的接口,用来定义一些最基本,最简单的管理bean的方法,如获取bean等等
BeanFactory有非常多的实现类,每个实现类都有不同的职责(单一职责),最强大的是DefaultListableBeanFactory Spring底层就是使用的该实现工厂进行生产bean对象(spring管理的类生产的对象)的;
ApplicationContext
间接继承了BeanFactory接口,并且扩展了一些新的功能
二者的所处地位如下:
二者区别
1.BeanFactory是Spring框架的基础设施,面向spring本身,是spring原始的factory,他不支持AOP、Web等插件,即就是实现了BeanFactory的工厂,不能有这些功能。而ApplicationContext不仅包含了Beanfactory的所有功能,还支持spring的各种插件,实现AOP的多种功能。
2.BeanFactory采用的是延迟加载的形式注入Bean的,只有是使用创建Bean对象时,才会对该bean进行加载实例化,这样,我们就不能发现一些存在的 Spring 的配置问题。而 ApplicationContext 则相反,它是在容器启动时,一次性创建了所有的 Bean。这样,在容器启动时,我们就可以发现Spring 中存在的配置错误。相对于基本的 BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置 Bean 较多时,程序启动较慢
beanFactory面向spring框架,比较底层
ApplicationContext 由于实现了许多的接口,增加了额外的功能
实现了BeanFactory接口的工厂,是懒加载,获取bean时才会创建对象。
实现了ApplicationContext接口的工厂,在启动时加载所有的类,创建对象。
Servlet的过滤器Filter与Spring拦截器区别
Filter过滤器:属于底层的javaweb/servlet中定义的,实现由服务器调度;拦截范围更大,所有进入到web后端的请求,都可以被过滤器拦截;
spring拦截器Interceptor:是在请求进入servlet后,在进入controller之前进行预处理的。
下面的图能够有助于我们的理解: