Spring基本应用

什么是Spring

Spring是分层的JavaSE/EE full-stack轻量级开源框架,以IoC(Inverse of Control控制反转)和AOP(Aspect Oriented Programming面向切面编程)为内核。
实际开发中,通常服务器端采用三层体系架构,分别为
表示层(Web):提供了与Struts等架构的整合;
业务逻辑层(Service):管理事务、记录日志;
持久层(Dao):整合Hibernate、JdbcTemplate等技术;
习题

Spring框架优点

  1. 非侵入式设计
  2. 方便解耦,简化开发
  3. 支持AOP
  4. 支持声明式事务处理
  5. 方便程序测试
  6. 方便集成各种优秀框架
  7. 降低Java EE API的使用难度

Spring体系结构

体系结构

  1. Core Container

Beans:提供了BeanFactory,Spring将管理对象称为Bwan。
Core:提供Spring框架的基本组成部分,包括IoC和DI功能。
Context:建立在Core和Beans模块的基础之上,访问定义和配置的任何对象的媒介。
SpEL:Spring3.0后新增的模块,运行是查询和操作对象图的强大的表达式语言。

  1. Data Access/Integration(数据访问/集成)

JDBC:提供JDBC的抽象层,大幅度减少了开发过程中对数据库操作的编码。
ORM:对流行的对象关系映射API,包括JPA,JDO和Hibernate提供了集成层支持。
OXM:提供了支持对象/XML映射的抽象层实现,如JAXB、Castor、XMLBeans、JiBX和XStream。
JMS:指Java消息传递服务,包含使用和产生信息的特性,自4.1版本后支持与Spring-message模块的集成。
Transactions:支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理。

  1. Web

WebSocket:Spring4.0以后新增的模块,他提供了WebSocket和SockJS的实现,以及对STOMP的支持。
Servlet:Spring-webmvc模块,包含Spring模型——视图——控制器(MVC)和REST Web Services实现的Web程序。
Web:提供Web开发集成特性,如:多文件上传、使用Servlet监听器来初始化IoC容器以及Web应用上下文。
Portlet:提供在portlet环境中使用MVC实现,类似Servlet模块的功能。

  1. 其他模块

AOP:提供面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。
Aspects:提供与AspectJ的集成功能,AspectJ是一个功能强大且成熟的面向切面编程(AOP)框架。
Instrumentation:提供类工具支持和类加载器的实现,可以在特定的应用服务器中使用。
Messaging:Spring4.0新增的模块,提供对消息传递体系结构和协议的支持。
Test:支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理。
习题

Spring下载及目录结构

1.spring框架包原网址:spring-framework-4.3.6.RELEASE-dist.zip
打不开用下方下载地址:https://wws.lanzous.com/icYbfnq0m2d
密码:hmc9

  1. 以.RELEASE.jar结尾的是class文件JAR包
  2. 以.RELEASE-javadoc.jar结尾的是API文档压缩包
  3. 以.RELEASE-sources.jar结尾的是源文件压缩包

四个Spring的基础包,对应Spring核心容器的四个模块。

spring-core-4.3.6.RELEASE.jar 包含Spring框架的核心工具类,Spring其它组件都要用到这个包里的类。

spring-beans-4.3.6.RELEASE.jar 所有应用都要用到的JAR包,它包含访问配置文件、创建和管理Bean以及进行控制反转或者依赖注入操作相关的所有类。

spring-context-4.3.6.RELEASE.jar 提供了在基础IoC功能上的扩展服务,还提供了许多企业级服务的支持。

spring-expression-4.3.6.RELEASE.jar定义了Spring的表达式语言。

2.第三方依赖包
原网址:commons-logging-1.2-bin.zip
打不开用下方下载地址:https://wws.lanzous.com/ibex4nq4zzi
密码:ejp7

Spring核心容器

Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制。Spring为我们提供了两种核心容器,分别为BeanFactory和ApplicationContext。
创建BeanFactory实例时,需要提供Spring所管理容器的详细配置信息,这些信息通常采用XML文件形式来管理,其加载配置信息的语法如下:
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource(“F: /applicationContext.xm1”));[XML配置文件位置]

ApplicationContext是BeanFactory的子接口,是另一种常用的Spring核心容器。它由org.springframework.context.ApplicationContext接口定义,不仅包含了BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等方面的支持。创建ApplicationContext接口实例,通常采用两种方法,具体如下:

  1. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
    ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。
  2. ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
    FileSystemXmlApplicationContext会从指定的文件系统路径(绝对路径)中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。

在Java项目中,会通过ClassPathXmlApplicationContext类来实例化ApplicationContext容器。而在Web项目中,ApplicationContext容器的实例化工作会交由Web服务器来完成。
Web服务器实例化ApplicationContext容器时,通常会使用ContextLoaderListener来实现,此种方式只需要在web.xml中添加如下代码:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/applicationContext.xm1
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

创建Spring容器后,就可以获取Spring容器中的Bean。Spring获取Bean的实例通常采用以下两种方法:

  1. object getBean(String name);
    根据容器中Bean的id或name来获取指定的Bean,获取之后需要进行强制类型转换。
  2. <T> T getBean(Class <T> requiredType);
    根据类的类型来获取Bean的实例。由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换。

Spring入门程序

  1. 在Eclipse中,创建一个名为chapter01的Web项目,将Spring的4个基础包以及commons-logging的JAR包复制到lib目录中,并发布到类路径下。
    lib

  2. 在src目录下,创建一个com.itlv.ioc包,并在包中创建接口UserDao,然后在接口中定义一个say()方法。

package com.itlv.ioc;
public interface UserDao {
	public void say();
}
  1. 在com.itlv.ioc包下,创建UserDao接口的实现类UserDaoImpl,该类需要实现接口中的say()方法,并在方法中编写一条输出语句。
package com.itlv.ioc;
public class UserDaoImpl implements UserDao {
	@Override
	public void say() {
		System.out.println("UserDao say hello world");
	}
}
  1. 在src目录下,创建Spring的配置文件applicationContext.xml,并在配置文件中创建一个id为userDao的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-4.3.xsd">

    <!-- 将指定类配置给spring,让spring创建其对象的实例 -->
<bean id="userDao" class="com.itlv.ioc.UserDaoImpl"></bean>
</beans>

此配置文件可以在解压缩文件:spring-framework-4.3.6.RELEASE\docs\spring-framework-reference\html 文件中找到。如图:配置文件
5. 在com.itlv.ioc包下,创建测试类TestIoc,并在类中编写main()方法。在main()方法中,需要初始化Spring容器,并加载配置文件,然后通过Spring容器获取userDao实例(即Java对象),最后调用实例中的say()方法。

package com.itlv.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoc {
	public static void main(String[] args) {
		//1.初始化spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		//2.通过容器获取userdao实例
		UserDao userDao = (UserDao) applicationContext.getBean("userDao");
		//3.调用实例方法
		userDao.say();
	}
}

测试成功测试成功

依赖注入

DI的全称是Dependency Injection,中文称之为依赖注入。它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。

  1. Ioc:在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是控制反转。
  2. DI:从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。

依赖注入实现方式

使用setter方法实现依赖注入

  1. 在com.itlv.ioc包中,创建接口UserService,在接口中编写一个say()方法。
package com.itlv.ioc;
public interface UserService {
	public void say();
}
  1. 在com.itlv.ioc包中,创建UserService接口的实现类UserServiceImpl,在类中声明userDao属性,并添加属性的setter方法。
package com.itlv.ioc;
public class UserServiceImpl implements UserService {
	//声明UserDao属性
	private UserDao userDao;
	//添加UserDao屬性的setter方法,用于实现依赖注入
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	public void say() {
		//调用UserDao中的say()方法,执行实语句
		this.userDao.say();
		System.out.println("userService say hello world");
	}
}
  1. 在配置文件applicationContext.xm1中,创建一个id为userService的Bean,该Bean用于实例化UserServiceImpl类的信息,并将userDao的实例注入到userService中。
<!-- 添加一个id为UserServic的实例 -->
<bean id="userService" class="com.itlv.ioc.UserServiceImpl">
	<!-- 将id为userDao的Bean实例注入到UserService实例中 -->
	<property name="userDao" ref="userDao"></property>
</bean>
  1. 在com.itlv.ioc包中,创建测试类TestDI,来对程序进行测试。
package com.itlv.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
	public static void main(String[] args) {
		//1.初始化Spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		//2.通过容器获取UserService实例
		UserService userService = (UserService) applicationContext.getBean("userService");
		//3.调用实例中的say()方法
		userService.say();
	}
}

测试结果
测试结果

小结

本章主要介绍了Spring框架入门的一些基础知识,包括Spring的概念、优点、体系结构、核心容器、依赖注入等,同时通过一个入门程序讲解了Spring的基本使用。
通过本章的学习,读者可以对Spring框架及其体系结构有一个初步的了解,能够初步的掌握Spring框架的使用,并能够理Spring框架中IoC和DI的思想,掌握属性setter方法注入的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值