1、简述spring
Spring是一个轻量级的IOC和AOP容器框架
2、Spring常用的三种配置
基于XML、注解、Java的配置
3、主要模块
Spring Core:核心类库,提供IOC服务
Spring Context:提供框架的Bean访问方式,以及企业级功能(JNDI、定时任务)
Spring AOP:面向切面编程
Spring DAO:面向JDBC的抽象,简化了数据访问异常处理
Spring ORM:对现有的ORM框架的支持
Spring WEB:提供了基本的面向web的综合特性,例如多方文件上传
Spring MVC:提供面向WEB应用
4、IOC和DI的对比概述
IOC即控制反转:以前创建对象是开发人员维护,依赖㽑也是自己注入。使用Spring以后,对象创建和依赖关系由spring完成创建和注入。反转就是对象的创建的方式。由我们自己创建交给程序创建。
DI:Dependency Injection依赖注入:当需要对象时,Spring将新建好的对象注入进来。
注入方式:
① set方式注入 :<property name="" ref=""/>
② 构造方法注入 :<constructor-arg index="" ref=""/>
③ 方法注入:<lookup-method name="" bean=""/>
在目标对象中定义一个普通的方法,将方法的返回值设置为需要注入的依赖对象类型。
注入类型:1、值类型注入 2、引用类型注入
IOC和DI的优点:
1、降低组件之间的耦合度,使软件各层之间解耦
5、spring的ioc容器中配置bean状态
singleton(默认):单例
prototype:非单例
request / session/global session:web专用
6、IOC注解
优势:简化了xml文件配置
控制反转类型:
@Component
@Controller
@Service
@Repository
注入类型:
@Autowired (这个注解属于Spring):基于类型注入;可用于构造方法、成员变量、方法
@Qualifier("bean名称"):配合@Autowired,当相同接口类型有多个实现时。如:@Service("对应名")
@Resource(这个注解属于J2EE的):@Resource(name="")=@Autowired+@Qualifier
3、编程式事务、声明式事务
编程式事务:既手动控制事务;开发相对繁琐,每次都需要开启、提交、回滚
声明式事务:spring管理,核心实现就是AOP,属于粗粒度的事务控制:只能给整个方法应用事务,不可以对方法的某几行应用事务。
4、spring框架中提供的两种实例化bean对象的工厂类型
1)BeanFactory及其直接实现子类XmlBeanFactory
使用时,通过getBean("")实例化一个bean
2)ApplicationContext及其直接实现子类
ioc容器解析时实例化所有bean
5、Spring在web.xml中的注册
1) ContextLoaderListener:加载Spring中application.xml文件,并初始化IOC容器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2) DispatcherServlet:与Spring IoC容器无缝集成,渲染视图页面
<!-- 可以配置多个,用于加载不同的xml配置文件 -->
<servlet>
<servlet-name>chapter2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- load-on-startup:加载顺序 -->
<load-on-startup>1</load-on-startup>
<!-- 初始化参数 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>chapter2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3) RequestContextListener:想让你的容器里的某个bean拥有request、session或global session。除了在bean级上配置相应的scope属性,还必须在容器级做一个额外的初始化配置。
<!-- 此配置是Servlet 2.4后使用的 -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
4) spring过滤器设置编码格式
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
4、Spring文件上传
1)SpringMVC中需要xml中配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="utf-8" />
<!-- 文件大小最大值 -->
<property name="maxUploadSize" value="1048" />
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="40960" />
</bean>
2)SpringBoot中的配置
1.先在application.properties中配置
multipart.maxFileSize=50MB
multipart.maxRequestSize=50MB
2.在配置类中配置
类名上添加@Configuration,表明这是一个配置类
在类中添加如下代码:
@Bean // @Bean这个注解会吧return的那个类装到spring的bean工厂里
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("10240KB");
factory.setMaxRequestSize("102400KB");
return factory.createMultipartConfig();
}
3)form表单中添加enctype="multipart/form-data"
Controller中使用MultipartFile参数实现单文件上传
Controller中使用HttpServletRequest接收参数然后强转为MultipartHttpServletRequest再调用.getFiles("filename");实现多文件上传
5、JDK内置计时器
1.Timer 计时器对象
2.TimeTask 任务对象 (实现需求)
6、Spring定时任务
基于注解@Scheduled和Quartz框架
1.基于注解@Scheduled适用于较少定时任务时
2.Quartz框架适用于较多定时任务时,采用多线程架构保证可伸缩性。
7、事务
事务需要满足四个条件:
1、原子性
2、一致性
3、隔离性
4、持久性
事务并发读问题:
1、脏读:读取到另一个事务未提交的数据
2、不可重复度:两次读取不一致(数据被修改)
3、幻读:读到另一个事务已插入一条数据(新增删除数据)
事务四大隔离级别:
1、串行化(最严格,性能最差)
不会发生任何并发问题
性能最差
2、可重复度
防止脏读和不可重复读,不能防止幻读
性能较上个好
3、读已提交
防止脏读,不防止不可重复读和幻读
性能较上个好
4、读未提交
可能出现任何事物并发问题,什么都没处理
性能最好
8、webservice应用程序
web应用程序:基于BS架构的,用于处理基于HTTP协议请求的一个类或者一组类 组成的一个模块/功能,每一个模块 或者 每一个功能 都可以抽象成一个web应用程序.
webservice应用程序:特殊的web应用程序、将程序中的某个功能或某个模块 发布给 其他工程进行访问
webservice服务器端:用于发布webservice程序
webservice客户端:通过webservice技术访问其他服务器发布的webservice程序
webservice技术 :
axis2 重量级的webservice技术;必须配置在服务器中进行使用 [jndi方式进行访问]
xfire 提供了myeclipse内置集成
cxf 提供了spring集成
9、cxf
1 基于cxf - webservice程序的发布
webservice服务器端
1.1 在spring环境下添加cxf框架支持
a 导入cxf提供的核心jar 以及spring提供的整合jar
b 在ioc容器中导入cxf提供的命名空间、schame文件
c 在ioc容器中导入cxf提供的第三方辅助xml文件
cxf.xml
cxf-servlet.xml
cxf-extension-soap.xml
1.2 在spring环境下,使用cxf发布webservice应用程序
a 提供一个普通的web应用程序
webservice技术底层采用接口编程
将一个普通的web应用程序 发布给 其他工程进行使用的话
不能将这个程序的具体实现发布出去
发布webservice,只需要将该程序的声明发布出去
接口
b 为需要发布成webservice应用程序的普通程序提供接口实现,
c 使用 @WebService 标注需要发布成webserivce程序的对象及其实现的接口
d 在ioc容器中配置发布的过程
e 注册一个用于接收其他工程向本工程发送的webservice请求的中央控制器(请求接收器)
web.xml
CXFServlet
测试发布是否成功
http://localhost:8080/cxf_server/ws/hello?wsdl
将访问的接口 以 wsdl 格式 展示出来
wsdl webservice底层文件协议
底层采用xml技术实现
webservice技术会将所有发布的webservice程序以xml形式进行存储和交互
2 webservice客户端
使用cxf访问其他工程发布的webservice应用程序
2.1 非spring环境下
直接使用cxf进行访问
a 创建java工程 , 添加cxf 核心jar(12)
客户端访问webservice应用程序也是基于接口方式
b 将服务器发布的webservice应用程序提供的接口添加到客户端程序中
保证客户端使用的接口必须和服务器提供的接口一模一样
2.2 spring环境下 , 集成的方式进行访问
接口方式 :
仅适用于服务器端和客户端使用java语言
配置cxf环境变量 :
cxf_home D:\apache-cxf-2.7.17
path D:\apache-cxf-2.7.17\bin
classpath D:\apache-cxf-2.7.17\lib