目录
对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博客