一、战斗伊始:Spring
Spring是一个开源框架,一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。从大小和开销而言Spring都是轻量的;通过控制反转(IoC)达到松耦合;提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发;包含并管理应用对象的配置和生命周期,这种意义上是容器;将简单的组件配置组合成为复杂的应用,这种意义上是框架。
- Spring把它管理的对象叫做bean;
- 控制反转就是把控制权交出去,返回我们能使用的对象;
- IOC(配置、注解)
- Bean(配置、注解):在Spring里把由他管理的东西都叫Bean
- AOP(配置、注解、AspectJ、API)
- http://spring.io/ //官网首页,有很多项目的介绍
- http://projects.spring.io/spring-framework //提供了很多文档和例子等
1、IoC容器(通过bean配置来取得对象,而不用new来取得对象了)
(1)接口与面向接口编程
(2)IOC控制反转(获得依赖对象的过程被反转了,于是控制反转有一个更适合的名字依赖注入,这实际上给了实现IOC的方法:注入):控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器(Spring容器)负责创建和维护;
(3)DI依赖注入(由IOC容器在运行期间,动态的将某种依赖关系注入到对象之中)是控制反转的一种实现方式;IOC目的是创建对象并组装对象之间的关系。
房屋租赁 | IOC容器 | |
---|---|---|
房屋中介 | IOC | |
找中介 | 找IOC容器 | |
中介介绍房子 | 容器返回对象 | |
租房、入住 | 使用对象 |
补充:单元测试
- 下载junit-*.jar包并引入工程
- 创建UnitTestBase类,完成对Spring配置文件的加载、销毁(Before是在单元测试方法之前执行的内容,context就是我们所说的spring的容器,当他启动之后会在配置文件里面查找信息,并把这些信息解析加载到context这个上下文里面,After是在单元测试方法之后执行的内容);
- 所有单元测试类都继承自UnitTestBase,(子类通过创造构造器传入XML文件位置)通过他的context的getBean方法获取想要得到的对象;
- 子类加注解@RunWith(BlockJUnit4ClassRunner.class)
- 单元测试方法加注解@Test
(3)Bean容器的初始化涉及到两个基础包org.springframework.beans和org.springframework.context,第一个包中主要是BeanFactory类提供配置结构和基本功能,加载并初始化Bean,第二个包中主要是ApplicationContext保存了Bean对象(容器);
(4)初始化加载ApplicationContext方法
- 本地文件
- Classpath
- Web应用中依赖servlet或listener
(5)Spring注入是指在启动Spring的IOC容器加载bean配置的时候完成对变量的赋值行为。常用注入方式:设值注入(必须有set方法)和构造注入(必须有构造器)。例如:在Service里面去完成业务逻辑的处理,然后调用Dao把最终数据保存到数据库中。
<bean id="injectionDao" class="com.ioc.interfaces.InjectionDaoImpl"></bean>
<!--设值注入-->
<bean id="injectionService" class="com.ioc.interfaces.InjectionServiceImpl">
<property name="injectionDao" ref="injectionDao"></property>
</bean>
<!--构造注入-->
<bean id="injectionService" class="com.ioc.interfaces.InjectionServiceImpl">
<constructor-arg name="injectionDao" ref="injectionDao"></constructor-arg>
</bean>