1.什么是spring:
开源的,轻量级的IOC(控制反转)和AOP(面向切面编程)的容器框架。
2.spring的两个核心技术
IOC ,AOP
3.什么是IOC
控制反转
对bean的创建权由组件转移到了外部容器。
4.什么是DI
依赖注入
IOC的一个具体的实现过程;
在运行期,spring容器,组件的依赖对象主动的注入到组件中。
5.如何实例化spring容器,如何从spring容器中获取javaBean
new ClassPathXmlApplicationContext("配置文件的路径");//src下
context.getBean("id|name");
6.springBean 中命名的方式有几种?有什么区别?
id name
name="name1,name2"
7.spring属性注入的方式有几种?
set
构造器
自动注入
8.set属性注入的前提条件是什么?
set方法
9.set方法属性注入 的简写形式是什么?前提条件是什么?
p命名空间 属性set方法
加载p命名空间
10.spring的如下配置,底层代码实现了什么功能?
<bean id="user" class="pojo.User">
<property name="name" value="王博" />
</bean>
调用无参的构造器,实例化对象;
调用set方法进行属性注入
11.构造器属性注入的前提是什么?
有有参的构造器
12.构造器属性注入的简写形式是什么?前提条件是什么?
C命名空间 有参的构造器+无参的构造器
C命名空间
13.spring的如下配置,底层代码实现了什么功能?
<bean id="user" class="pojo.User">
<constructor-arg index="0" value="王博" />
</bean>
调用有参的构造器实例化对象,有参的构造器有1个参数。
14.属性自动注入的方式有几种?分别是如何实现的?
<bean autowired="">
<beans default-autowired="">
byName 根据属性的名称 set方法属性注入
byType 类型 set方法属性注入
constructor 根据构造器 构造函数属性注入 byType, byName
no
default
15.spring容器中bean的作用域是什么?
<bean scope="singleton| prototype|request|session|gloable session">
singleton默认的:单例的
prototy:多例的
16.set属性注入的标签
<property>
17.构造函数属性注入的标签是
<constructor-arg>
18.list set map properties在Spring中的写法
<list>
<value> <ref>
</list>
<set>
<value><ref>
</set>
<map>
<enty key="" value="" key-ref="" value-ref="">
</map>
<props>
<prop key=""> 值</prop>
</props>
19.集合类的属性,用P,C命名空间时用到util命名空间
<util:list id="">
<value><ref>
</util:list>
20.spring配置bean实例化有哪些方式?
1)使用类构造器实例化(默认无参数)
<bean id="user" class="com.buba.spring.prop.User" ></bean>
2)使用静态工厂方法实例化(简单工厂模式)
<!--静态工厂方法 工厂类不需要实例化-->
<!-- 调用JDBCFactory的getJdbc方法得到jdbc -->
<bean id="jdbc" class="com.buba.simple.JDBCFactory" factory-method="getJdbc">
<constructor-arg value="Mysql"/>
</bean>
3)使用实例工厂方法实例化(工厂方法模式)
<!--实例工厂方法是先将工厂实例化-->
<!-- 先创建工厂实例bean3Facory,再通过工厂实例创建目标bean实例 -->
<bean id="factory" class="com.buba.factory.MysqlFactory"></bean>
<bean id="mysql" factory-bean="factory" factory-method="getJdbc"></bean>
21. Bean的生命周期
bean的生命周期,只有知道生命周期,才真正的掌握这个对象。
往往笔试和面试总喜欢问关于生命周期的问题。
根据流程图当中涉及调用很多的方法,可能我们直接去理解和记忆比较困难,其实对于这么一大堆方法我们可以根据它们的特点对他们进行整理分类,下面提供一种可供大家参考的分类模型:
分类类型 | 所包含方法 |
Bean自身的方法 | 1.bean的构造器实例化bean 2.为bean注入属性 3.调用bean的init-method属性指定的初始化方法 4.执行业务代码 5.销毁时调用bean的destroy-method属性指定的销毁方法 |
Bean级生命周期接口方法 | 必须继承接口才会执行下面接口中的方法。 BeanNameAware、BeanFactoryAware、 InitializingBean、DiposableBean等接口中的方法 |
容器级生命周期接口方法 | InstantiationAwareBeanPostProcessor、BeanPostProcessor 等后置处理器实现类中重写的方法 |
22.spring里配置bean有两种方式:
一是bean工厂BeanFactory,
二是应用上下文:ApplicationContext
23.ApplicationContext应用上下文容器和BeanFactory Bean工厂的区别是什么?
如果使用ApplicationContext,则配置的bean如果是singleton,不管你用不用,都被实例化了,(好处就是可以预加载,缺点就是耗内存)
如果是使用BeanFactory,则当你实例化该对象的时候,配置的bean不会被马上实例化,当你使用的时候才会被实例化。好处就是节约内存,缺点是速度有点慢。
在项目中如果没有特殊要求,一般使用ApplicationContext完成,如果是移动设备,内存小,就用BeanFactory;
不足之处请谅解,仅个人经历