一、Spring核心概念

Spring核心两个概念是IOC和AOP。

IOC是控制反转的意思,也就是Bean创建全部由Spring容器负责,这些Bean可以用户自定义的Bean,也可以是外部SDK中的Bean,创建的方式会有不同。Spring框架负责Bean的产生、Bean相互之间依赖注入等。

AOP是横向切面编程。平常我们面向对象编程时会产生各种方法method,而如果这些方法需要修改需要编码操作我们希望找到一种柔性的方式给原有的方法打个补丁,而不需要修改原有的方法。AOP就是一种Proxy机制通过生成原有方法的代理方法从而实现功能增强。

二、XML方式的IOC

XML中可以实现Bean的创建以及属性设置依赖注入

(1)创建beanxml配置模板

<bean id=”xxxclass=”yyy”></bean>

xxx指定beanid,在yyy中指定beanclass路径,便于java反射机制创建bean

(2)bean的属性设置

       在bean的property通过namevalue设置属性信息,后续Bean初始化时会自动set这些信息到属性中。参考

       <bean id=”xxxclass=”yyy”>

              <property name=”age” value=18></property>

       </bean>

(3)bean的依赖注入

       Bean之间会相互依赖(暂时不考虑循环依赖的情况),此时需要在使用注入一个Bean,通过nameref设置依赖的bean。参考

       <bean id=”xxxclass=”yyy”>

              <property name=”zzz” ref=”aaa”></property>

       </bean>

在属性设置依赖注入中,name对应对象setXXX方法中的xxx值。

三、Bean配置

(1)Bean原型单例模式

原型prototype模式下,每次getBean()都是创建一个新的Bean实例

单例singleton模型下,每次getBean()都是从单例池中获取相同的Bean实例

(2)lazyinit

值为true时,Bean使用时才创建

(3)constructor-arg参数

提供bean创建时的参数,包括构造方法中的参数

(4)factory-method参数

通过指定Bean的factory-method指定方法创建,比如

<bean id=”xxx” class=”yyy.zzz” factory-method=”aaa”></bean>

就是通过zzz的aaa方法创建bean,而不是创建zzz的bean

四、基于XML的Bean实例化的基本流程

Spring容器初始化生命周期一步)的操作为:

  1. xml配置每个<bean>封装一个BeanDefinition对象
  2. 所有的BeanDefinition存储到BeanFactory的BeanDefinitionMap
  3. Spring对该Map进行遍历使用反射机制创建Bean实例对象,这些对象都存储singletonObjects的Map集合
  4. 调用getBean方法时,从上一步的Map集合中取Bean实例对象返回

五、Spring后处理器

(1)作用

Spring框架我们介入到Bean实例化的一个扩展点,可以进行动态注册BeanDefinition动态修改BeanDefinition,以及动态修改Bean的作用

(2)两种后处理器

 

六、Spring Bean的生命周期

生命周期从Bean实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。Spring Bean的生命周期大体上分为三个阶段

  1. Bean的实例化阶段:将一个普通的singleton的Bean通过反射进行实例化,此时还是个“半成品”
  2. Bean的初始化阶段:对Bean实例的属性进行填充、执行一些Aware接口方法、执行BeanPostProcessor方法、执行InitializingBean接口初始化方法、执行自定义初始化init方法。AOP增强功能以及Spring的注解功能都是在该功能实现。
  3. Bean的完成阶段:经过初始阶段,Bean就成为了一个完整的Spring Bean,被存储到单例池singletonObjects中去了,即完成了Spring Bean的整个生命周期

七、Aware接口

Spring框架提供访问底层对象、注入对象到底层的方法,比如ServletContext、BeanFactory、ApplicationContext对象等。

八、IOC整体流程

九、@Component注解的属性

用于自定义的Bean的注解

  1. value属性,只有一个value默认取消
  2. scope属性,对应xml中的<bean:scope=””>,取值singleton或prototype
  3. Lazy属性,延迟加载属性
  4. PostConstruct属性,对应xml中的<bean init-method=””>,是Bean的实例化后执行的方法

@Component注解的衍生注解有:@Repository、@Service、@Controller

十、@Bean注解

用于自定义Bean的注解。

非自定义Bean要通过工厂方式进行实例化,使用@Bean标注方法即可,@Bean的属性为beanName,如不指定的话则为当前工厂的方法名称。同时,工厂方法所在类必须被Spring管理

参考

@Component

Public class OtherBean{

       @Bean(“dataSource”)

       Public DataSource dataSource(){

              xxx

}

}

十一、@Configuration注解

替代了applicationContext.xml文件 + @Component的功能

十二、@Profile注解

用于环境切换标注了的时候只有激活当前环境才能被注册到Spring容器里,如果不指定则任何环境下都能被注册到Spring容器里。

参考

@Repository(“userDao”)

@Profile(“test”)

Public class UserDaoImpl implements UserDao(){}

可以使用如下两种方式指定激活环境

  1. 命令行方式虚拟机参数位置加载:-Dspring.profiles.active=test
  2. 代码方法,System.setProperty(“spring.profiles.active”, “test”);

十三、AOP思想的实现方案

动态代理技术运行期间,对目标对象的方法进行增强,代理对象同名方法内可以执行原有逻辑的同时嵌入执行其他增强逻辑或其他对象的方法。

十四、AOP的概念

十五、XML中配置AOP的示例

十六、Spring事务编程

事务:一堆操作共进退。

参考

十七、SpringMVC关键组件

HandlerMapping:根据路径匹配目标处理对象,比如根据/show 匹配到QuickController的show方法

HandlerAdapter:处理方法

ViewResolver:上一步方法返回字符串解析成最终的视图后端响应。如果希望返回值不要被解析视图使用@ResponseBody进行标注

十八、Get请求和Post请求的差异

  1. get请求只能发送ASCII字符post请求能发送更多的数据类型
  2. post请求发送数据更大,get请求有url长度限制
  3. post请求更安全post请求不会作为url的一部分,不会被缓存保存服务器日志、以及浏览器浏览记录中;get请求的是静态资源则会缓存,如果是数据则不会缓存
  4. 传参方式不同
  5. Get产生一个TCP数据包post产生两个

十九、Restful风格数据

(1)URI表示某个资源名称

(2)用请求方式表示模块具体业务动作

GET表示传、POST表示插入、PUT表示更新

(3)用HTTP响应状态表示结果

国内常用的响应包括三部分状态码、状态信息、响应信息

二十、SpringMVC拦截器Interceptor

作用:主要是对Controller资源访问时进行拦截操作拦截时可以进行权限控制、功能增强等。

与Filter的区别

拦截器接口:

拦截器使用:

原文地址:https://blog.csdn.net/benben044/article/details/134799274

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48100.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注