如何学
- 掌握用法
- 深入理解
- 不断实践
- 反复总结
- 再次深入理解和实践
学习资源:
http://spring.io/
http://projects.spring.io/spring-framework/
spring 概况:spring 是什么
Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的,但现在已经不止应用于企业应用
是一个轻量级的控制反转和面向切面的容器框架
- 从大小与开销两方面而言,spring 都是轻量的
- 通过可控制反转的技术达到耦合的目的
- 提供与面向切面的编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发
- 包含并管理应用对象的配置和生命周期,这个意义上是一种容器
- 将简单的组件配置、组合成为复杂的应用,这个意义上是框架
spring的优缺点
- 在spring上开发应用简单
- 在spring上开发应用方便
- 在spring上开发应用快捷
spring的作用:
- 容器
- 提供了对多种技术的支持
–JMS
–MQ
支持 AOP(事务管理、日志) 提供众多方便应用的辅助类(JDBC template等) 对主流应用框架(Hibernate)提供了良好的支持
适用范围:
- 构建企业应用(spring MVC+Spring +Hibernate/ibatis)
- 单独使用bean 容器(bean 管理)
- 单独使用AOP进行切面处理
- 其他的Spring 功能,如对消息的支持等 在互联网中的应用
什么是框架:
通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范;也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品
框架就是制定一套规范或者规则(思想),程序员在该规范或者规则下工作。或者说就是使用别人搭建好的舞台,你来做表演。
框架的特点:
半成品
封装了特定的处理流程和控制逻辑
成熟的,不断升级改进的软件
框架和类库的区别
框架一般是封装了逻辑、高内聚的、类库则是松散的工具组合
–框架一般专注于某个领域,类库则是更通用的
为什么使用框架
:
软件系统日趋复杂
重用度高,开发效率和质量提高
软件设计人员专注要对领域的了解,使需求分析更充分
易于上手、快速解决问题
专题----IOC
接口:
- 用于沟通的中介的抽象化
- 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式
- 对应Java接口即声明,声明了哪些方法是对外提供的
- 在Java 8中,接口可以拥有方法体
面向接口编程
- 结构化设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类
- 接口实现的变动不影响各层间的调用,这一点在公共服务中尤为重要
- 面向接口编程中的接口是用于隐藏具体实现多动态的组件
什么是IOC
- IOC :控制反转,控制权的转移,用户程序本身不负责依赖对象的创建和维护
- DI(依赖注入)是其一种实现方式
- 目的:创建对象并且组装对象之间的关系
单元测试
- 下载junit -*.jar 并引入工程
- 创建UnitTestBase类,完成对spring配置文件的加载、销毁
- 所有的单元测试类都继承自UnitTestBase,通过它的getBean 方法获取想要得到的对象
- 子类(具体执行单元测试的类)加注解:@RunWith(BlockJUnit4ClassRunner.class)
- 单元测试方法加注释:@test
- 右键选择要执行的单元测试方法执行或者执行一个类的全部单元测试方法
Bean容器初始化
基础:两个包
org.springframework.beans
org.springframework.context
-
1. ----BeanFactory提供配置结构和基本功能,加载并初始化bean
2. -----ApplicableContext保存了bean对象并在Spring中被广泛使用
3. 方式,ApplicationContext
# ----本地文件
- Classpath
- -----Web应用中依赖servlet或Listener
## Bean容器初始化
*
## 文件
*
```java
```java
FileSystemXmlApplicationContext context= new FileSystemXmlApplicationContext("F:/workspace/appcontext.xml");
Classthpath
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring-context.xml");
``
Web 应用
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Spring注入
Spring 注入是指在启动Spring容器加载bean 配置的时候,完成对变量的赋值行为 常用的两种注入方式
- 设置注入
- —构造注入
设置注入
``<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="injectionService"class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<property name="injectionDAO"ref="injectionDAO"/>
</bean>
<bean id="injectionDAO"class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></beans>
</beans>`
# bean的配置项
Id
Class
Scope
Constructor arguments
Properties
Autowiring mode
lazy-initialization mode
Initialization/destruction method
bean的作用域
singleton :单例,指一个Bean容器中只存在一份
prototype:每次请求(每次使用)创建新的实例,destroy方式不生效
request:每次http请求创建一个实例且仅在当前request内有效
session:同上 ,每次请求创建,当前session内有效
global session:基于protlet的web中有效(portlet定义了global session),如果是在web 中,同session
Bean的生命周期
生命周期
定义
初始化
使用
销毁
初始化
——实现org.springframework.beans.factory.InitializingBean接口,覆盖afterPropertiesSet方法
——配置init-method
<bean id ="exampleInitBean"class="examples.Examplebean"init-method="init"/>
public class ExampleBean {
public void init(){
}
}