欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

SSM思想—阶段性总结

时间:2023-06-14

目录

对Spring优点的理解:

BeanFactory与Application的区别:

SpringBean的生命周期:

Spring IOC理解:

Spring AOP思想:

SpringMVC工作流程:

 一些其他的Spring内容:


对Spring优点的理解:

首先Spring框架最重要的两个功能就是IOC(控制反转)+AOP(面向切面编程)

Spring的特点:

1.低侵入性设计(意思就是说它的类或者接口并没有任何迹象表明了它们是Spring的组件;也就是说这个类在Spring应用或者非Spring应用中都能发挥这同样的作用);

2.降低耦合度;(比如说你把类的权限交给了IOC容器中,那么B类要用到你所放入容器的A类,只需注入就可以实现A类方法了,而不是new一个A类对象....,而这个IOC容器就可以理解为饭桌上装饭的容器,A和B类相当于是两个碗,你A挖B的饭,B挖A的饭,那饭不就耦合了吗,那碗多了的话,相互挖那还吃屁啊,一个意思);

IOC=工厂模式+反射+配置文件读取—>所有的javaBean都被IOC容器管理,你需要的时候只要跟他说一声就行了,然后IOC就会给你一个正确的对象;

3.与第三方框架有良好的整合效果(不能很体会到,我是菜鸡);


BeanFactory与Application的区别:

BeanFactory是Spring容器的接口,并且是根接口,而ApplicationContext是它的子接口,通常我们是用ApplicationContext来访问Spring容器的;

BeanFactory:

提供了实例化对象和拿对象的功能;

在启动时不会实例化bean,而是在运行时中从容器拿的时候才会实例化,并不是之前就实例化好的,反射机制;

好处:占用资源少;

ApplicationContext:

应用上下文,继承了BeanFactory接口,可以理解为更高一级的容器,有更多的功能:

1.国际化;2.访问其他资源;3.AOP ;4.消息发送,响应机制;

在容器启动的时候就吧所有的Bean全部实例化,并且我们可以配置@lazy进行延迟实例化—>(

也就是说,我们只有访问对应资源的时候,要用到这个bean的时候才会实例化);

好处:在启动时候就把所有的bean加载了,有利于尽早发现配置问题;

我们一般都是通过applicationContext加载配置文件从而将bean注册到容器中(或者是注解方式)


SpringBean的生命周期:

对于如下这些方法,我们可以分成如下几类

Bean自身的方法:比如构造函数、getter/setter以及init-method和destory-method所指定的方法等
Bean级生命周期方法:可以理解为Bean直接实现接口的方法,比如BeanNameAware、BeanFactoryAware、ApplicationContextAware、InitializingBean、DisposableBean等方法,这些方法只对当前Bean生效;

容器级方法(BeanPostProcessor接口...):之前的接口方法的实现类都是基于bean的,并且会注册到容器中,而这个接口的方法是对容器来说的,在其初始化前后执行接口中的方法;

BeanNameAware:该接口只有setBeanName(String Name):用于获取bean的id或者name;

BeanFactoryAware:该接口只有setBeanFactory(),用于获取当前环境的BeanFactory;

ApplicationContextAware:该接口只有一个方法setApplicationContext(ApplicationContext applicationContext),用于获取当前环境的ApplicationContext,获取到IOC容器之后,可以对bean进行操作;

InitializingBean:该接口中有afterPropertiesSet(),在属性注入完成后调用;

DisposableBean:该接口只有一个方法destroy(),在容器销毁的时候调用,在用户指定的destroy-method之前调用

BeanPostProcessor该接口有两个方法:
postProcessBeforeInitialization(Object bean, String beanName):在初始化之前调用此方法
postProcessAfterInitialization(Object bean, String beanName):在初始化之后调用此方法

通过方法签名我们可以知道,我们可以通过beanName来筛选出我们需要进行个性化定制的bean

InstantiationAwareBeanPostProcessor:
该类是BeanPostProcessor的子接口,常用的有如下三个方法
postProcessBeforeInstantiation(Class beanClass, String beanName):在bean实例化之前调用;
postProcessProperties(PropertyValues pvs, Object bean, String beanName):在bean实例化之后、设置属性前调用;
postProcessAfterInstantiation(Class beanClass, String beanName):在Bean实例化之后调用;


 我们知道对于普通的java对象来说,它们的生命周期就是

实例化不再使用的时候通过垃圾回收机制进行回收


Spring IOC理解:

 IOC首先一种设计思想。对象的创建有自己控制—>第三方Spring容器控制(个人认为就是获取对象的方式发生了改变);


Spring AOP思想:

实现:

(10条消息) Spring-AOP的几种方式_Fairy要carry的博客-CSDN博客

他在Spring中主要表现两个方面:

1.提供声明式事务管理;

2.支持自定义切面;

而切面编程,个人认为就是对之前自己的编程的内容所进行的补充;而切面的编程AOP思想本身是基于动态代理实现的,有利于降低耦合性;

对比与面向对象编程OOP,OOP是将程序分为了各个层次的对象,而AOP是将程序运行过程分解为各个切面;

(10条消息) 静态代理与动态代理的思考_Fairy要carry的博客-CSDN博客

那么问题来了,为什么要用动态代理模式呢?

因为切面编程无非就是增加我们需要的内容,在运行时我们需要增加什么内容再去增加就比较方便,容易维护,动态代理也也就是这样的思想;


SpringMVC工作流程:

1.用户发送请求给到前端控制器DispatcherServlet;

2.DispatcherServlet接收到请求后,调用HandlerMapping处理器映射器:为的就是找到处理请求对应的处理器;

3.生成处理器对象并且返回给DispatcherServlet;

4.然后DispatcherServlet通过HandlerAdapter处理器适配器调用对应的处理器;

5.执行处理器(也就是后端控制器Controller);

6.执行完后返回ModelAndView;

7.HandlerAdaper将controller执行的的结果ModelAndView返回给DispatcherServlet;

8.然后DispatcherServlet将ModelAndView返回给具体的视图层View;

9.DispatcherServlet然后对View中的视图进行数据渲染,将后台的数据渲染到页面上;

7.最后响应给用户;

 (10条消息) SpringMVC流程_Fairy要carry的博客-CSDN博客


 一些其他的Spring内容:

(10条消息) Spring的一些注意问题以及感悟_Fairy要carry的博客-CSDN博客

(10条消息) 简单拦截器实现—MVC_Fairy要carry的博客-CSDN博客

(10条消息) SSM-项目整合简单思路_Fairy要carry的博客-CSDN博客

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。