Spring学习笔记1:概论

内容部分来自于《Spring实战第4版》

1:EJB与Spring的区别

传统的EJB:高侵入性,需要实现框架的接口或继承类。
Spring:轻量级,低侵入性,依靠xml配置等完成功能。

 

2:Spring的并发问题

当多个用户同时请求一个服务时,容器会给每一个请求分配一个线程,这时多个线程会并发执行该请求对应的业务逻辑(成员方法),此时需要注意,如果该处理逻辑中有对单例状态的修改(体现为该单例的成员属性),则必须考虑线程同步问题。

 

有状态和无状态的bean:
可以保存数据的bean:有状态,线程不安全
固定不变的:无状态,线程安全。Dao层和Service层是无状态的(前提:外部没有全局变量)

Spring装配bean默认加载的是singleton的,可以通过设置scope属性来调整。(对于有状态的bean可以设置为prototype,每次都会新建)
(个人理解:每个线程有单独的区域,区域内有无状态bean的副本,与其他的线程区分开来。)

 

Struts2和SpringMVC比较:struts2的action实质上是prototype的,每个请求生成一个action,保证了线程安全。

SpringMVC通过一个前端控制器进行请求分发,属于单例,在必要时需要考虑并发。

 

3:Spring容器

Spring的容器类型:大致可以归纳为两类:bean工厂(BeanFactory)和应用上下文(ApplicationContext).
BeanFactory较为低级,应用上下文是基于bean工厂实现的(常用)

Spring通过应用上下文装载组装bean,根据不同的配置实现方式(xml或java配置等)选用不同的上下文进行加载。
ClassPathXmlApplicationContext:类路径下加载xml实现加载上下文
FileSystemXmlApplicationContext:系统文件路径加载xml

在使用aop切面前需要将切面以及切点所在的类纳入spring的管理范围(声明为bean)

spring自带的jdbctemplate模板类可以模板化jdbc的部分固定代码。

 

BeanFactory和FactoryBean的区别
都为接口。
BeanFactory表示为生产bean的工厂,用于新建、配置bean等。
FactoryBean表示为工厂bean(spring中bean有两种:普通bean和工厂bean),它本身由spring管理。
也可以将其理解为生产、管理bean的bean。但是:通过spring获取factorybean时,返回的是该factorybean所管理的bean实体。如果需要获取factorybean本身,需要在名称前加&。
例如:appleFactoryBean生产applebean,通过spring获取appleFatoryBean实际返回的是applebean,加上&返回appleFactoryBean。

 

4:边角料
OGNL表达式与EL表达式:
OGNL通过#取值,主要用于struts2框架的取值塞值。#可以理解为struts2的ActionContext(实质为一个map,可以存储信息)
EL表达式通过$取值,可以单独使用。

 

posted @ 2018-09-10 22:14  快乐肥宅  阅读(102)  评论(0编辑  收藏  举报