IOC和DI的概念,以及Spring框架的介绍

对于Java开发者来说,Spring肯定是一个避不开的手艺。以是准备系统的学下Spring框架。

我给自己设计的学习门路是这样的:首先阅读下Spring的官方文档(注重Spring官网上有许多项目,Spring的基础框架是Spring FrameWork这个项目),纪录我以为主要的内容,利便后续回首;到这边对Spring已经有了基本的熟悉,然后是找一到两本关于Spring源码的书,深入学习下Spring框架的原理性内容;最后是对于Spring的要害特征单独写博客纪录,实在也就是对第二步的纪录,你看了源码剖析之后会对Spring的实现原理也有些领会。这些器械你不纪录的话会很快遗忘。博客是一个很好的纪录和分享自己所学的工具。以是后续我会对Spring的启动历程、自动注入、AOP和Spring MVC这些我之前看起来很高级的特征单独写博客纪录。

本博客是学习门路的第一步,是对Spring官方文档的纪录。主要是熟悉Spring框架有哪些功效,基本的使用方式是怎样的。由于Spring FrameWork的官方文档比较长,以是分模块来纪录了,本博客是Spring FrameWork焦点手艺部门的纪录,基于5.2.6版本.关于这个版本相对于之前版本的更新,请点击毗邻查看。

简介

Spring是一个轻量级的Java Bean容器,这个容器为应用程序的开发提供了基础框架(基础功效)的支持,让开发人员能够关注营业逻辑的开发,大大了提升开发效率。Spring提供的基础功效异常普遍,包罗焦点的IOC、AOP、资源接见、国际化、数据绑定和SpEL表达式,另有对Web的支持(Spring MVC),种种数据库的支持(spring-data),以及对种种第三方框架集成的支持(spring-Integration)(jms、准时义务、邮件等)。

The Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java applications. Spring handles the infrastructure so you can focus on your application.

然则传统的Spring应用开发有个坏处,就是设置过于繁琐。为了简化Spring应用程序的开发,现在Spring团队推出了Spring Boot项目,支持自动设置,内嵌Web容器等焦点功效,可以大大简化Spring应用的开发。SpringBoot因此也越来越盛行。对于越来越盛行的微服务,Spring也提供了Spring Cloud解决方案。

本博客覆盖了Spring最主要的功效IOC和AOP。首先先容IOC功效,讲完IOC后会详细解说AOP。Spring框架有它自己的AOP实现,基本已经能够解决企业开发中对AOP80%的需求。另外,Spring也提供了和AspectJ集成的功效。若是Spring的AOP实现不能知足你的需求,可以思量使用AspectJ。

.NET 开源工作流: Slickflow流程引擎高级开发(七)–消息队列(RabbitMQ)的集成使用

依赖注入和控制反转观点

使用Spring必然会接触到这两个观点。

  • 控制反转:工具建立的控制权由应用程序转移到Spring容器。举个例子:以前新建一个工具我们要在应用程序自动new一个工具,并给工具的属性赋值,使用Spring的情形:容器卖力工具的建立治理。
  • 依赖注入:所谓依赖注入,即组件之间的依赖关系由容器在运行期决议,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。若是不使用IOC容器的话,可能需要我们通过组织函数在初始化类的时刻注入(Spring的官方文档注释:一个应用程序往往是由许多类组成的,那类和类之间又会有许多依赖关系。所谓依赖注入就是说Spring在初始化治理一个类的时刻会同时将这个类依赖的类注入进入(初始化))

Spring模块

整个Spring框架被分成许多个小的模块,每个模块卖力专门的功效。

IOC和DI的概念,以及Spring框架的介绍

Spring的整个IOC容器功效由spring-core, spring-beans, spring-context, springcontext-support,和spring-expression这几个模块提供。

  • spring-core, spring-beans这两个模块实现了最基本的IOC容器功效(IOC、依赖注入)。容器的基础接口BeanFactory就是在这两个模块中实现的;
  • spring-context和spring-context-support模块提供了ApplicationContext的实现,扩展了基础容器的功效;
  • spring-expression:提供了对表达式语言的支持;
  • spring-aop和spring-aspects:提供了对面向切面的支持;
  • spring-instrument和spring-instrument-tomcat:Spring对Web服务器的支持;
  • spring-messaging,spring-jms:对信息体系结构和协议的支持
  • spring-jdbc、spring-orm、spring-oxm、spring-tx、spring-jms:提供数据获取方面的支持;
  • spring-web, spring-webmvc, spring-websocket, 和springwebmvc-portlet提供Web相关的支持;
  • spring-test提供测试相关支持。

Maven依赖

为了防止版本号杂乱,Spring提供了简捷方式使用依赖

    <dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-framework-bom</artifactId>
				<version>5.1.3.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

    //在父pom中加入上面依赖后,就可以像下面这样使用,不需要指定版本号
    <dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
		</dependency>
	<dependencies>    

Spring日志

Spring中使用JCL举行日志输出。熟悉JCL的人知道JCL只是一个日志门面,我们可以自己选择日志实现框架。JCL默认的日志实现框架是log4j,使用起来很利便,只需要加入下面的依赖并且在classpath下面加入log4j.properties就可以了。

<dependencies>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.17</version>
	</dependency>
</dependencies>

若是想使用Log4j 2.x作为日志的实现框架,加入下面依赖,并且在classpath下加入log4j2.xml

<dependencies>
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>2.6.2</version>
	</dependency>
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-jcl</artifactId>
		<version>2.6.2</version>
	</dependency>
</dependencies>

若是我们不想使用JCL作为日志的门面,可以这样添加依赖,这样Spring框架中的日志就会路由到SLF4J这个日志门面中去了。

//使用slf4j作为日志的门面,使用logback作为日志的实现框架
<dependencies>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>jcl-over-slf4j</artifactId>
		<version>1.7.21</version>
	</dependency>
	<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-classic</artifactId>
		<version>1.1.7</version>
	</dependency>
</dependencies>

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/19246.html