目录
文章所属专区 超链接
闲着也是闲着,来都来了,看看吧。
Singleton:单例模式,Spring 容器中只会创建一个 Bean 实例,所有对该 Bean 的请求都将返回同一个实例。默认的作用域为 Singleton。
作用域:
Prototype:原型模式,每次请求该 Bean 时,都会创建一个新的 Bean 实例。因此,该 Bean 的生命周期和请求周期相同。
Request:每个 HTTP 请求都会创建一个新的 Bean 实例,该 Bean 的生命周期将与 HTTP 请求的生命周期相同。只有在 Web 应用程序上下文中才有意义。
Session:每个 HTTP Session 都会创建一个新的 Bean 实例,该 Bean 的生命周期将与 HTTP Session 的生命周期相同。只有在 Web 应用程序上下文中才有意义。
Global Session:该作用域仅适用于基于 Portlet 的 Web 应用程序,它表示 Portlet 应用程序的全局 Session 范围内创建 Bean 实例。只有在 Portlet 上下文中才有意义。
类型:
POJO 类型的 Bean:通过配置文件或注解方式定义的简单 Java 对象。
Factory Bean 类型的 Bean:实现了 FactoryBean 接口的 Bean,可以通过其 getObject() 方法返回一个其他类型的 Bean 实例。
Abstract Bean 类型的 Bean:继承了 AbstractBeanDefinition 类的 Bean,可以自定义 Bean 的创建和销毁过程,例如:自定义属性注入和初始化方法的调用时机等。
Inner Bean 类型的 Bean:在 Bean 的属性值中定义的一个 Bean,它的生命周期与外部 Bean 相关联,外部 Bean 销毁时内部 Bean 也会被销毁。
Alias Bean 类型的 Bean:通过别名引用其他 Bean 实例的 Bean,通常用于简化配置文件中的 Bean 引用。
对 Prototype Bean 来说,当用户 getBean 获得 Prototype Bean 的实例后,IOC 容器就不再对当前实例进行管理,而是把管理权交由用户,此后再 getBean 生成的是新的实例。
所以我们描述 Bean 的生命周期,都是指的 Singleton Bean。
1. 实例化Bean
通过xml配置或者注解(Autowire)告诉spring哪些bean需要实例化。
对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化
对于BeanDefinition,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。
2. 设置对象属性(依赖注入)
实例化后的Bean对象被封装在BeanWrapper对象中,Spring容器根据BeanDefinition中的信息,以及BeanWrapper提供的设置属性的接口完成依赖注入。
3. 初始化
初始化完成后,Bean就可以被使用了
3.1 检查Aware相关接口,并设置依赖
spring会检测Bean是否实现了Aware相关接口(xxxAware),并将xxxAware实例注入给Bean
如果实现了BeanNameAware,会调用他实现的setBeanName(String beanId)方法,传递的是这个Spring配置文件的这个Bean的id值(beanId);
如果实现了BeanFactoryAware,会调用他实现的setBeanFactory()方法,传递的是spring工厂本身;
如果实现了ApplicationContextAware,会调用他实现的setApplicationContext()方法,传递的是spring上下文;
3.2 BeanPostProcesser前置处理
BeanPostProcesser用来做一些自定义处理,那将会调用postProcessBeforeInitialization
3.3 是否实现Initailization接口
执行afterPropertiesSet()方法
3.4 Bean是否在Spring的配置文件中配置了 init-method属性
如果有,则会调用其配置的初始化方法
3.5 BeanPostProcesser后置处理
BeanPostProcesser用来做一些自定义处理,那将会调用postProcessAfterInitialization(Object
obj, String s)方法。
真正实现初始化的是 3.3 3.4两部 其他都是初始化的前后置处理。
4.1DisposableBean接口
当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法
4.2 destroy-method
如果spring的配置文件里配置了destroy-method属性,会自动调用其配置的销毁方法。
Mysql的索引类型
没有任何限制,唯一的作用是加速数据的查找,允许在定义索引的列为空以及重复,关键字 index,key
create index index_name on table_name (column_name);
alter table table_name add index index_name (column_name);
唯一索引是为了避免数据出现重复,索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一。UNIQUE
create unique index index_name on table_name (column_name);
alter table table_name add unique index_name (column_name);
不允许索引列为空或者更值重复,PRIMARY KEY
create table table_name
(
id int not null,
username varchar(16) not null,
primary key (column_name)
);
将多个列共同组成一个索引
create index index_name on table_name (column_name1, column_name2);
5.全文索引
主要用来查找文本中关键字,只能在 CHAR、VARCHAR 或 TEXT 类型的列上创建。在 MySQL 中只有 MyISAM 存储引擎支持全文索引。
全文索引允许在索引列中插入重复值和空值。
不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。
创建全文索引使用 FULLTEXT 关键字。
常见的数据结构有 二叉树,红黑树 B-TREE,B+TREE
而Mysql的数据结构是 B+Tree
使用spring 的redis注解@CacheConfig,@Cacheable,@CachePut,@CacheEvict,@Caching
将方法查出来的结果放到redis,后面有调这些接口,如果数据有命中,先从redis读取,速度快,性能好,避免直接查询数据库,如果没有,再去数据库查找。
Https:是HTTP的安全版,它是在HTTP的基础上加上了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密
客户端浏览器发起请求到服务端进行处理,都是和服务端的DispatcherServlet(Controller)进行交互,由前端控制器处理浏览器的请求并返回view给浏览器
spring中bean的创建,使用到销毁全部由容器来实现
1.解析xml配置或注解配置的类,得到BeanDenifition(Bean的描述)
2.实例化bean对象(通过BeanDefinition反射来创建Bean对象,此时只是在堆空间中申请空间,属性都是默认值)
3.设置Bean对象属性
4.检查Aware相关接口并设置相关依赖(所有调用容器对象的地方都会实现Aware接口),如BeanNameAware
5.调用BeanPostProcessor的初始化前方法
6.调用init初始化方法
7.调用BeanPostProcessor的初始化方法,此处会进行AOP
8.将创建的Bean对象放入一个Map中
9.业务使用Bean对象
10.Spring容器关闭时调用哪个DisposableBean的destory()方法
给个三连吧 谢谢谢谢谢谢了