Fork me on GitHub

spring笔记一

以前的笔记,推上来记录下。

IOC和DI的区别?
IOC和DI是同一件事情,都是将对象控制权交给第三方(Spring)管理,只是站在不同角度。

IOC钟哪些方面的控制被反转了?
获得依赖对象的过程被反转了。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

BeanFactory和FactoryBean的区别?
BeanFactory:是一个工厂(其实是构建了一个spring上下文的环境,容器),用来管理和获取很多Bean对象。
FactoryBean:是一个Bean生成工具,是用来获取一种类型对象的Bean,它是构造Bean实例的一种方式。

spEL表达式
spEL(Spring Expression Language)是一种表达式语言,它是spring3.x版本的新特性。
它的作用是:支持在运行时操作和查询对象,其语法类似统一的EL语言,但是spEL提供了额外的功能,功能更强大。

什么是EL、OGNL、spEL
EL:操作servlet相关的一些对象和相关的值
OGNL:主要操作struts值栈
spEL:操作bean相关的

直接new ClassPathXmlApplicationContext()有什么缺点
缺点:在创建Spring容器同时,需要对容器种对象初始化。而每次初始化容器的时候,都创建了新的容器对象,消耗了资源,降低了性能。
解决思路:保证容器对象只有一个。
解决方案:将Spring容器绑定到Web Servlet容器上,让Web容器来管理Spring容器的创建和销毁。
分析:ServletContext在Web服务运行过程中是唯一的,其初始化的时候,会自动执行ServletContextListener监听器(用来监听上下文的创建和销毁)。
具体步骤为:编写一个ServletContestListener监听器,在监听到ServletContext创建的时候,创建Spring容器,并将其放到ServletContext的属性中保存。
我们无需手动创建该监听器,因为Spring提供了一个叫ContextLoaderListener的监听器,它位于spring-web-4.2.5.REKEASE.jar中。
开发步骤:
第一步:导入spring web的jar
第二步:在web.xml配置Spring的核心监听器
第三步:启动tomcat服务器,结果发现异常,因为默认会加载。
根据异常提示:发现spring的BeanFactory没有初始化,说明没有找到spring容器,即applicationContext.xml文件。
第四步:在web容器中配置spring文件路径
为什么没有找到applicationContext.xml文件呢?因为此时加载的是WEB-INF/applicationContext.xml,而不是src下的applicationContext.xml文件。
原因:找到ContextLoaderListener.class,再找到ContextLoader.class,发现默认加载的WEB-INF/applicationContext.xml。
解决方案:需要在web.xml中配置,加载spring容器applicationContext.xml文件的路径。
重新启动tomcat服务器,没有异常,问题解决。
第五步:修改Servlet代码。在Servlet中通过ServletContext获取Spring容器对象。
第一种方式:使用getAttribute。
第二种方式:使用WebApplicationContextUtils(推荐)。

servletContext
1、servletContext就是代表web应用的一个servlet类。也就是说一个web应用只有一个servletContext对象。
2、servletContext是用来管理web应用下的资源的。
3、servletContext是可以被所有访问其代表web应用的用户共享的。
4、servletContext是在服务器端被创建和销毁的。

Your support will encourage me to continue to create!