一、Spring的核心概念
IOC是控制反转的意思,也就是Bean的创建全部由Spring容器来负责,这些Bean可以是用户自定义的Bean,也可以是外部SDK中的Bean,创建的方式会有不同。Spring框架负责Bean的产生、Bean相互之间的依赖注入等。
AOP是横向切面编程。平常我们面向对象编程时会产生各种方法method,而如果这些方法需要修改则需要硬编码操作,我们希望找到一种柔性的方式给原有的方法打个补丁,而不需要修改原有的方法。AOP就是一种Proxy机制,通过生成原有方法的代理方法从而实现功能增强。
二、XML方式的IOC
(1)创建bean的xml配置模板
<bean id=”xxx” class=”yyy”></bean>
在xxx中指定bean的id,在yyy中指定bean的class路径,便于java反射机制创建bean。
(2)bean的属性设置
在bean的property中通过name和value设置属性信息,后续Bean初始化时会自动set这些信息到属性中。参考:
<bean id=”xxx” class=”yyy”>
<property name=”age” value=18></property>
</bean>
(3)bean的依赖注入
Bean之间会相互依赖(暂时不考虑循环依赖的情况),此时需要在使用方注入另一个Bean,通过name和ref设置依赖的bean。参考:
<property name=”zzz” ref=”aaa”></property>
</bean>
在属性设置和依赖注入中,name对应对象的setXXX方法中的xxx值。
三、Bean配置
(1)Bean原型、单例模式
原型prototype模式下,每次getBean()都是创建一个新的Bean实例
单例singleton模型下,每次getBean()都是从单例池中获取相同的Bean实例
(2)lazy–init
(3)constructor-arg参数
(4)factory-method参数
通过指定Bean的factory-method指定方法创建,比如:
<bean id=”xxx” class=”yyy.zzz” factory-method=”aaa”></bean>
就是通过zzz的aaa方法创建bean,而不是创建zzz的bean
四、基于XML的Bean实例化的基本流程
- 将xml配置的每个<bean>封装成一个BeanDefinition对象
- 所有的BeanDefinition存储到BeanFactory的BeanDefinitionMap中
- Spring对该Map进行遍历,使用反射机制创建Bean实例对象,这些对象都存储到singletonObjects的Map集合中
- 当调用getBean方法时,从上一步的Map集合中取Bean实例对象返回
五、Spring后处理器
(1)作用
Spring框架让我们介入到Bean实例化的一个扩展点,可以进行动态注册BeanDefinition,动态修改BeanDefinition,以及动态修改Bean的作用
(2)两种后处理器
- BeanFactoryPostProcessor:在BeanDefinitionMap填充完毕之后,Bean实例化之前执行,所以只执行一次
- BeanPostProcessor:在Bean实例化之后,填充到单例池singletonObjects之前执行,bean每实例化一次就执行一次。提供了postProcessorBeforeInitialization和postProcessAfterInitialization方法,前者在bean属性已经设置完毕但未进行初始化时被调用,后者在bean属性值已经被填充完毕后被调用。
- BeanPostProcessor实例化过程:
六、Spring Bean的生命周期
该生命周期从Bean实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。Spring Bean的生命周期大体上分为三个阶段:
- Bean的实例化阶段:将一个普通的singleton的Bean通过反射进行实例化,此时还是个“半成品”
- Bean的初始化阶段:对Bean实例的属性进行填充、执行一些Aware接口方法、执行BeanPostProcessor方法、执行InitializingBean接口的初始化方法、执行自定义初始化init方法。AOP增强功能以及Spring的注解功能都是在该功能实现。
- Bean的完成阶段:经过初始化阶段,Bean就成为了一个完整的Spring Bean,被存储到单例池singletonObjects中去了,即完成了Spring Bean的整个生命周期。
七、Aware接口
Spring框架提供访问底层对象、注入对象到底层的方法,比如ServletContext、BeanFactory、ApplicationContext对象等。
八、IOC整体流程
九、@Component注解的属性
- value属性,只有一个value默认可取消
- scope属性,对应xml中的<bean:scope=””>,取值有singleton或prototype
- Lazy属性,延迟加载属性
- PostConstruct属性,对应xml中的<bean init-method=””>,是Bean的实例化后执行的方法
@Component注解的衍生注解有:@Repository、@Service、@Controller
十、@Bean注解
非自定义Bean要通过工厂方式进行实例化,使用@Bean标注方法即可,@Bean的属性为beanName,如不指定的话则为当前工厂的方法名称。同时,工厂方法所在类必须被Spring管理。
参考:
@Component
Public DataSource dataSource(){
xxx
}
}
十一、@Configuration注解
替代了applicationContext.xml文件 + @Component的功能
十二、@Profile注解
用于环境切换,标注了的时候只有激活了当前环境才能被注册到Spring容器里,如果不指定则任何环境下都能被注册到Spring容器里。
参考:
Public class UserDaoImpl implements UserDao(){}
- 命令行方式,虚拟机参数位置加载:-Dspring.profiles.active=test
- 代码方法,System.setProperty(“spring.profiles.active”, “test”);
十三、AOP思想的实现方案
动态代理技术,在运行期间,对目标对象的方法进行增强,代理对象同名方法内可以执行原有逻辑的同时嵌入执行其他增强逻辑或其他对象的方法。
十四、AOP的概念
十五、XML中配置AOP的示例
十六、Spring事务编程
参考:
十七、SpringMVC关键组件
HandlerMapping:根据路径匹配目标处理对象,比如根据/show 匹配到QuickController的show方法
ViewResolver:上一步方法返回的字符串,解析成最终的视图给后端响应。如果希望返回值不要被解析成视图则使用@ResponseBody进行标注。
十八、Get请求和Post请求的差异
- get请求只能发送ASCII字符;post请求能发送更多的数据类型
- post请求发送的数据更大,get请求有url长度限制
- post请求更安全,post请求不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中;get请求的是静态资源则会缓存,如果是数据则不会缓存。
- 传参方式不同
- Get产生一个TCP数据包,post产生两个
十九、Restful风格的数据
(1)URI表示某个资源名称
(2)用请求方式表示模块具体业务动作
(3)用HTTP响应状态表示结果
二十、SpringMVC拦截器Interceptor
作用:主要是对Controller资源访问时进行拦截操作,拦截时可以进行权限控制、功能增强等。
拦截器接口:
拦截器使用:
原文地址:https://blog.csdn.net/benben044/article/details/134799274
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_48100.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!