Spring 介绍简单使用

一. 什么是Spring

Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。

Spring 是轻量级的Java 开发框架,其基础版本只有 2 MB 左右的大小。

Spring 的核心是控制反转(IoC)和面向切面(AOP)。

简单来说,Spring 是一个分层的 JavaSE/EEfull-stack (一站式) 轻量级开源框架

1. 为什么说Spring是一个一站式的轻量级开源框架呢?

首先轻量级:不是指Spring框架的模块少,数量很轻,而是指Spring框架的非侵入性,即对象可以不必依赖Spring的API类

其次,JavaEE开发可分成三层架构,针对JavaEE的三层结构,每一层Spring都提供了不同的解决技术。

  • WEB层:SpringMVC
  • 业务层:Spring的IoC
  • 持久层:Spring的JDBCTemplate (Spring的JDBC模板,ORM模板用于整合其他的持久层框架)

2. Spring的优点:

  • 方便解耦,简化开发。

Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护,交给Spring管理。

  • AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

  • 声明式事务的支持

只需要通过配置就可以完成对事务的管理,而无须手动编程。

  • 方便程序的测试

Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀的框架

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts2、Hibernate、MyBatis、Quartz等)的直接支持。

  • 降低JavaEE API的使用难度

Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

  • Java 源码是经典学习范例

      Spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

3. Spring框架的组成结构图:

    

核心容器

核心容器由 spring-core,spring-beans,spring-context 和 spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成,它们的细节如下:

  • spring-core:提供了框架的基本组成部分,包括 IoC 和依赖注入功能。

  • spring-beans:提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。

  • spring-context模块建立在由core和 beans 模块的基础上建立起来的,它以一种类似于JNDI注册的方式访问对象。Context模块继承自Bean模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过Servelet容器)等功能

  • spring-expression:提供了强大的表达式语言,用于在运行时查询和操作对象图。它是JSP2.1规范中定义的统一表达式语言的扩展,支持set和get属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从Spring IoC容器检索对象,还支持列表的投影、选择以及聚合等。

 

二. Spring 入门案例:

步骤一: 导入Spring的核心jar包外,还要导入Spring支持的日志Jar包log4jcommons-logging

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.0.8.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                        <version>1.2.17</version>
                </dependency>
	</dependencies>

   

步骤二:创建一个 model 类:

public class User {

	private int id;
	private String username;
	private String password;
    ...
}

步骤三:创建 Spring 的核心配置文件 applicationContext.xml

        注意:文件名和位置没有固定要求,名称可随便写,官方建议写成 applicationContext.xml 。

每个 bean 可定义的属性:

属性 描述
class 这个属性是强制性的,并且指定用来创建 bean 的 bean 类。
name 这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。
scope 这个属性指定由特定的 bean 定义创建的对象的作用域,它将会在 bean 作用域的章节中进行讨论。
constructor-arg 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
properties 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
autowiring mode 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
lazy-initialization mode 延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。
initialization 方法 在 bean 的所有必需的属性被容器设置之后,调用回调方法。它将会在 bean 的生命周期章节中进行讨论。
destruction 方法 当包含该 bean 的容器被销毁时,使用回调方法。它将会在 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">
	
        <!--
		id - 自定义给类取一个名字(默认规定) 确保唯一性
		class - 对应类名 不能是抽象类或者接口		
		定义bean时 要保证有一个无参数的构造方法	
	-->
	<bean id="user" class="cn.jq.springdemo.model.User">
		<property name="username" value="admin" ></property>
		<property name="password" value="admin123" ></property>
	</bean>
</beans>

步骤四:测试类

	public static void main(String[] args) {
		// 1.初始化ioc容器(装对象的容器)
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//2.从容器中获得创建好的对象
		User user = context.getBean("user", User.class);
		System.out.println(user);
	}

------
User [id=0, username=admin, password=null]

ClassPathXmlApplicationContext 默认加载classpath路径下的文件,只需指明对应文件的classpath路径下的配置文件名字即可。

ClassPathXmlApplicationContext 也可以接收可变参数的构造函数。

FileSystemXmlApplicationContext : 该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。

WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。

返回的都是一个 ApplicationContext (实际上ApplicationContext是一个接口), 即 Spring 的 IOC容器

ConfigurableApplicationContext 子接口, 提供了一些方法 close(), refresh(), 可以让 ApplicationContext 刷新和关闭。

从容器中获得创建好的对象:

三种方式

    1.  根据bean的id 获得对象 需要强转类型 , bean的id写错时 会抛出 NoSuchBeanDefinitionException

       User user1 = (User) context.getBean("user");

    2. 根据bean的class 获得对象 要确保同一种类型的bean只能配置一个

        User user2 = context.getBean(User.class);

    3. 根据bean的 id+bean的class 获得对象 要求id和类型一定要匹配正确

        User user3 = context.getBean("user", User.class);

猜你喜欢

转载自blog.csdn.net/qq_42402854/article/details/81878994