Spring中bean的作用域与生命周期
Spring中的bean
组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。
简单地讲,bean就是由IoC容器初始化、装配及管理的对象
Spring中的bean默认都是单例的(scope="singleton"默认值)
我们可以设置为多例(scope="prototype")
bean的作用域
当scope="singleton"时
Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象
不管你是否使用,他都存在了,每次获取到的对象都是同一个对象
当scope="prototype"时
Prototype是原型类型,它在我们创建容器的时候并没有实例化
而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象
bean的生命周期
1、当scope=”singleton”,即默认情况下,会在启动容器时实例化。
2、当scope=”prototype”时,容器会延迟初始化bean,Spring读取xml文件的时候,并不会立刻创建对象,
而是在第一次请求该bean时才初始化Spring容器一旦把这个对象交给你之后,就不再管理这个对象了。
面试题
1.有哪些不同的IOC依赖注入方式
直接的注入(seter)
构造注入
P命名标签注入
往集合内注入(<constructor-ary></constructor-ary>)
默认往域属性内注入(autowire="byType"与autowire="byName")
2.java九大隐式对象有哪些
request对象
response对象
session对象
application对象
out 对象
pageContext 对象
config 对象
page 对象
exception 对象
3.数据库里的索引和约束是什么
索引:指向表中数据的指针,把书比作数据,各个章节就相对于数据库中的表,而书的目录就是索引了。
约束:是为了设计数据库的完整性,防止数据库存在不符合语义的数据、错误信息的输入和输出
4.DAO的工作原理,能不能重载
Dao接口就是Mapper接口。映射文件中的namespace的值;接口的方法名,就是映射文件中Mapper的Statement的id值;
Mapper接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略
5.Mybatis时如何进行分页的,原理是什么
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
原理:是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。