一、Spring入门
1. Spring概述
- Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson创建
- Spring是轻量级的、非侵入性的:基于Spring开发的应用中的对象可以不依赖Spring的API。
- Spring是一个容器;管理着整个应用程序中所有的Bean的生命周期和依赖关系
- Spring核心是Ioc和AOP。Spring框架主要是为了降低耦合度,对于不同的代码采用了不同的方式,对于主业务程序,采用Ioc,对于系统级应用与主业务程序之间采用的是AOP的降低耦合的方式
- 简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库,不仅不排斥其他框架,还能帮其他框架管理对象。(实际上Spring自身也提供了表示层SpringMVC和持久层的Spring JDBC)
2. Spring的作用
- 方便解耦,简化开发:Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
- AOP编程的支持:Spring提供面向切片编程,可以方便的实现对程序进行权限拦截,运行监控等功能
- 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程
- 方便编程的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序
- 方便集成各种优秀框架:Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持(如Struts、Hibernate、MyBatis、Quartz等)
- 降低了Java EE API的使用难度:Spring对Java EE开发中非常难用的一些API(JDBC、JavaMail、远程调用等)都提供了封装,使这些API应用难度大大降低
总结:
Spring的主要作用就是为代码“解耦”,降低代码间的耦合度。
根据功能的不同,可以将一个系统中的代码分为主业务逻辑与系统级业务逻辑两类,它们各自具有鲜明的特点:主业务代码逻辑联系密切,有具体的专业业务应用场景,复用性相对较低;系统级业务相对功能独立,没有具体的专业业务应用场景,主要是为主业务提供系统级服务,如日志、安全、事务等。复用性强。
Spring根据代码的功能特点:将降低耦合度的方式分为两类:Ioc和AOP,Ioc使得主业务在相互调用的过程中,不用再自己维护关系了,即不用在自己创建要使用的对象了。而是由Spring容器同一管理,自动“注入“。而AOP使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务”混杂“到主业务逻辑中了,而是由Spring容器统一完成”织入“
3. Spring的特点
- 非侵入式:所谓非侵入式是指,Spring框架的API不会在业务逻辑上出现,即业务逻辑是POJO。由于业务逻辑中没有Spring的API,所以业务逻辑可以从Spring框架快速的移植到其他框架。即与环境无关。
- 容器:Spring作为一个容器,可以管理对象的生命周期、对象与对象之间的依赖关系。可以通过配置文件来定义对象,以及设置与其他对象的依赖关系。
- 控制反转IOC:控制反转Ioc(Inversion of Control),即创建被调用着的实例不是由调用者完成,而是由Spring容器完成,并注入调用者。当应用了Ioc,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。即不是对象从容器成查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
- 面向切面编程(AOP,AspectOrientProgramming)是一种编程思想,是面向对象编程OOP的补充,很多框架都实现了AOP编程思想的实现。Spring也提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行开发。应用对象只实现它们应该做的---完成业务逻辑—仅此而已。
4. Spring的模块
Spring由20多个模块组成,它们可以分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP、Aspects)、应用服务器设备管理(Instrumentation)、消息发送(Messagin)、核心容器(Core Container)和测试(Test)。
主要包括:
- Spring的核心容器:** beans、core、context、SpEL **;
- Spring的数据库管理:JDBC、ORM、OXM、JMS、Transactions;
- Spring的web表示层:WebSocket、** Servlet 、 Web **、Portlet;
- Spring的测试模块:Test
- 其他模块:** AOP、Aspects **、Instrumentation、Messaging;
Spring的核心组件只有core、context、beans三个。core包侧重于帮助类,操作工具;beans包更侧重于bean实例的描述;context更侧重全局空值,功能衍生。
5. Spring的版本和下载
- Spring的版本:
- Spring3.X:兼容Hibernate3
- Spring4.X:兼容Hibernate5
- Spring的下载
- Spring的官网:Spring的官网:http://spring.io
- Spring框架解压目录及JAR包说明
所需Spring框架的压缩包:
解压后目录的解释:
Spring开发的基础jar包:
6. Spring的入门程序
1. 导包
- %spring_home%/libs/spring-beans
- %spring_home%/libs/spring-context
- %spring_home%/libs/spring-core
- %spring_home%/libs/spring-expression
- dependecies/org.apache.commons/loggin:该文件只是日志记录的实现规范,并没有具体的实现,相当于slf4j.jar的作用
- dependecies/org.apache.log4j/log4j:老版本需要
2. 定义接口与实现类
package com.zhy.service;
public interface IStudentService{
void some();
}
package com.zhy.service.impl;
public class StudentServiceImpl implements IStudentService{
@Override
public void some(){
System.out.println("执行some()方法");
}
}
3. 创建Spring的配置文件注册对象到容器中
- 配置文件建议放到src下,配置文件名随意,但建议使用applicationContext.xml。文件约束在%spring_home%docsspring-framework-referencehtmlxsd-configuration.html文件中。
- 导入约束:
- 将实体对象交给spring容器管理:
- 在配置文件中添加
标签,用于定义一个实例对象,一个实例对应一个bean元素。 - 其中有id属性:该属性是bean实例的唯一标识,程序通过id属性访问bean,Bean与Bean间的依赖关系也是通过id属性关联的。
- class属性:指定该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="studentService" class="com.zhy.service.impl.StudentServiceImpl"></bean>
</beans>
4. 测试代码
- 创建容器对象
- 像容器中要bean实例对象
- 操作对象
@Test
public void helloWorldTest() {
// 1.创建Spring容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.获取bean对象
IStudentService studentService = (IStudentService) ac.getBean("studentService");
// 3.操作bean对象
studentService.some();
}