Spring 初探
Spring 初探
简介
Spring 是一个开源的轻量级 Java SE/Java EE开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注使这些对象协作来完成所需功能的同时,实现低耦合、高内聚。所以,业务逻辑开发是不可避免的。如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系,能通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们必然会减少许多工作量,加速开发。Spring 框架问世之初主要就是来完成这个功能。
Spring 正如它的名字给java开发者面向企业的开发带来了春天
Spring 概述
Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系
Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制
Spring能非常简单的帮我们管理数据库事务,还与第三方数据库访问框架(如 Hibernate、JPA )无缝集成,而且自己也提供了一套 JDBC 访问模板,来方便数据库访问。
与第三方 Web(如 Struts、JSF )框架无缝集成,而且自己也提供了一套 Spring MVC 框架,来方便 web 层搭建。
与 Java EE(如 Java Mail 、任务调度)整合,与更多技术整合(比如缓存框架)。
Spring 优点
应用程序,框架,非侵入式设计,轻量级与重量级,POJO ( Plain Old Java Objects )简单的 Java 对象,容器
反转控制:即 Inversion of Control ,缩写为 IoC ,控制反转还有一个名字叫做依赖注入( Dependency Injection ),就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。
Bean :一般指容器管理对象,在 Spring 中指 Spring IoC 容器管理对象。
AOP: AOP 是 Aspect Oriented Programming 的缩写,意思是面向切面编程。提供从另一个角度来考虑程序结构以完善面向对象编程( OOP ),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。
下载
截止到本文编辑,目前最新版本是5.0.0 M3
我下载的是4.3.3
Spring 开发环境搭建
Spring是运行在Java环境下的开发框架,因此在开发前需要准备以下相关软件:
JDK 7 或者以上版本
Eclipse (可以安装Spring For Eclipse IDE)
Spring Framework相关软件包
核心软件包介绍
spring-core 核心包
spring-beans JavaBean支持,Bean容器
spring-dao DAO事务支持
spring-context Application context,validation,JNDI,UI context 支持
spring-aop AOP framework,source-level metadata支持,AOP Alliance interface
NOTE
因为spring开发引入了第三方jar包,这里整理下
commons-logging Apache日志记录包
log4j Apache日志记录包
junit 单元测试包
slf4j 简单日志记录包
推荐使用Maven项目管理,自动导入上述包,而且不需要commons-logging
只需配置pom.xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
一个简单基于IoC的项目
定义接口类
package net.spring.test;
public interface MessageProvider {
public String getMessage();
}
定义实现类
package net.spring.test;
public class MessageHello implements MessageProvider {
@Override
public String getMessage() {
// TODO 返回消息
String Message = "This is Hello World";
return Message;
}
}
package net.spring.test;
public class MessageChina implements MessageProvider {
@Override
public String getMessage() {
String message = "大家好";
return message;
}
}
定义调用类
package net.spring.test;
public class HelloWorld {
public void showMessage(){
System.out.println("我们要说" + provider.getMessage());
}
private MessageProvider provider;
public void setProvider(MessageProvider provider) {
this.provider = provider;
}
}
定义测试类
package net.spring.test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
@SuppressWarnings("deprecation")
public class ShowHello {
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory(
new FileSystemResource("config.xml"));
HelloWorld messageReader = (HelloWorld) factory.getBean("helloBean");
messageReader.showMessage();
}
}
配置config.xml
<?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="helloBean" class="net.spring.test.HelloWorld">
<property name="provider" ref="helloChina">
</property>
</bean>
<bean id="helloHello" class="net.spring.test.MessageHello">
</bean>
<bean id="helloChina" class="net.spring.test.MessageChina">
</bean>
</beans>
也可以创建基于Junit的Maven项目,启动基于SpringBoot和Test注解的单元测试方法
添加spring依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.4.RELEASE</version>
</dependency>
</dependencies>