Spring框架基本介绍

基本概念

Spring是一个分层的Java SE/EE full-stack(一站式)轻量级开源框架,它以IOC(Inversion of Control,控制反转)AOP(Aspect Oriented Programming,面向切面编程) 为内核,使用基本的JavaBean工作,取代了以前Java企业Bean开发的臃肿低效的开发模式。

什么是JavaBean

Bean是Spring框架中最核心的两个概念之一(另一个是AOP)。能否掌握bean对理解Spring框架至关重要。从官方文档的定义来说:在Spring中,构成应用程序主干并由Spring IOC容器管理的对象称为bean。bean是一个由Spring IOC容器实例化、组装和管理的对象。
关于Bean的几个概念:

  • Bean容器,或称Spring IOC容器,主要用来管理对象和依赖,以及依赖的注入。
  • bean是一个Java对象,根据bean规范编写出来的类,并由 bean容器生成的对象就是一个bean。
  • bean规范如下:所有属性为private;提供默认构造方法;提供getter和setter方法;实现serializable接口

什么是IOC

IOC全称是Inversion of Control,即控制反转。控制反转是通过依赖注入(DI)方式实现对象之间的松耦合关系。
程序运行时,依赖对象由“辅助程序”动态生成并注入到被依赖对象中,动态绑定两者的使用关系。Spring IOC容器就是这样的辅助程序,负责对象的生成和依赖注入。
Spring控制类的构建过程:在Spring中,基本不需要new一个类,这些都是让Spring去做的。Spring启动时会把所需的类实例化成对象,如果需要依赖,则先实例化依赖,然后实例化当前类。因为依赖必须通过构建函数传入,所以实例化时,当前类就会接收并保存所有依赖的对象。这一步就是所谓的依赖注入(Dependency Injection,DI)
在Spring中,类的实例化、依赖的实例化、依赖的注入都交由Spring Bean容器控制,而不是用new方式实例化对象、通过非构造函数方法传入依赖等常规方式。实质的控制权已经交由程序管理,而不是程序员控制管理,因而叫做控制反转

什么是AOP

AOP,面向切面编程。在传统的业务处理代码中,通常都会进行事务处理、日志记录等操作。虽然使用OOP(面向对象编程)可以通过组合或者继承的方式来达到代码的重用,但如果要实现某个功能(如日志记录),同样的代码仍然会分散到各个方法中去。这样,如果要关闭某个功能,或者对其进行修改,就必须要修改所有的相关方法。为了解决这一问题,AOP就产生了。AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,然后再程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方,这种采取横向抽取机制的方式用传统的OOP思想是无法办到的,因为OOP只能实现父子关系的纵向的重用。AOP将影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。这种技术便于减少系统的重复代码,降低模块间的耦合度。
点击了解关于AOP的更多介绍

Spring框架的体系结构

在这里插入图片描述
Spring框架采用的是分层架构,它一系列的功能要素被分成20个模块。组成Spring的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块功能如下:

  • Core Container(核心容器)
    Spring的核心容器是其他模块建立的基础,它主要由Beans模块、Core模块、Context模块、Context-support模块和SpEL(Spring Expression Language表达式语言)模块组成。具体如下:
    Bean模块:提供了BeanFactory,是工厂模式的经典实现。
    Core核心模块:提供了Spring框架的基本组成部分,包括IOC和DI功能。
    Context上下文模块:建立在Core和Beans模块的基础上,它是访问定义和配置的任何对象的媒介。其中ApplicationContext接口是上下文模块的焦点。
    Context-support模块:提供了对第三方库嵌入Spring应用的集成支持
    SpEL模块:是运行时查询和操作对象图的强大的表达式语言

  • Data Access/Integration(数据访问/集成)
    数据访问/集成层包括JDBC、ORM、OXM、JMS和Transaction模块,具体如下:
    JDBC模块:提供了一个JDBC的抽象层,大幅度减少了在开发过程中对数据库操作的编码。
    ORM模块:对流行的对象关系映射API,包括JPA,JDO和Hibernate提供了集成层支持。
    OXM模块:提供了一个支持对象/XML映射的抽象层实现
    JMS模块:指Java消息传递服务
    Transaction事务模块:支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理

  • Web
    Spring的Web层包括WebSocket、Servlet、Web和Portlet模块

  • 其他模块
    其他模块还有AOP、Apects等等。

Spring的核心容器

Spring框架的主要功能是通过其核心容器来实现的,它提供了两种核心容器,分别是BeanFactory和ApplicationContext。

BeanFactory

BeanFactory由org.springframework.beans.factory.BeanFactory接口定义,是基础类型的IOC容器。它是一个管理Bean的工厂,主要负责初始化各种bean,并调用它们的生命周期方法。BeanFactory接口提供了几个实现类,其中最常用的是org.springframework.beans.factory.xml.XmlBeanFactory,该类会根据xml配置文件中的定义来装配bean。用BeanFactory加载配置信息的语法:

BeanFactory beanFactory = 
				new XmlBeanFactory(new FileSystemResource("d:/applicationContext.xml"));
ApplicationContext

ApplicationContext是BeanFactory的子接口,也称为应用上下文,它由org.springframework.context.ApplicationContext接口定义。一般采取ClassPathXmlApplicationContext创建ApplicationContext接口实例。ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作,语法如下:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);

其中configLocation参数用于指定Spring配置文件的名称和位置。

Spring的简单示例

在写项目前,需要在项目中导入以下几个包:
spring-beans-4.3.6.RELEASE.jar
spring-context-4.3.6.RELEASE.jar
spring-core-4.3.6.RELEASE.jar
spring-expression-4.3.6.RELEASE.jar
commons-logging-1.2.jar
上面最后一个jar包是第三方依赖包,不是Spring框架自带的,用来记录日志信息。
接下来就演示一个程序,初步认识Spring框架的用法
创建一个接口CustomerDao

public interface CustomerDao{
	public void hello();
}

创建一个类实现CustomerDao接口

public class CustomerDaoImpl implements CustomerDao{
	public void hello(){
		System.out.println("Hello CustomerDao");
	}
}

创建配置文件applicationContext.xml,并在配置文件中创建一个id为customerDao的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">
		
		<!--bean中class属性需要指出实例化类的全限定类名,即包名.包名.....类名-->
		<bean id="customerDao" class="CustomerDaoImpl"></bean>

</beans>

创建测试类TestIOC

public class TestIOC{
	public static void main(String[] args){
		//初始化Spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		//通过容器获得customerDao实例
		CustomerDao customerDao=(CustomerDao)applicationContext.getBean("customerDao");
		customerDao.hello();
	}
}

当程序执行后输出“Hello CustomerDao”,说明成功了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值