Spring介绍:
1、Spring的核心是一个轻量级(Lightweight)的容器(Container)。
2、Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架。
3、Spring提供AOP(Aspect-oriented programming)概念的实现方式。
4、Spring提供对持久层(Persistence)、事物(Transcation)的支持。
5、Spring提供MVC Web框架的实现,并对一些常用的企业服务API(Application Interface)提供一致的模型封装。
6、Spring提供了对现存的各种框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案。
总之,Spring是一个全方位的应用程序框架。
Spring是一个企业级应用框架。其中包含了大量的各种应用组件。Spring框架为现代基于Java的企业应用程序提供了一个全面的编程和配置模型,能够在任何类型的部署平台上进行部署。其核心是Ioc和AOP
Spring 中的两个核心概念
新手在刚接触Spring的时候,对 控制反转和依赖注入这两个名词感到很模糊,不知道这个Spring的核心 理念有什么关系,接下来笔者带领大家去解析以下Ioc和AOP
Ioc(Inversion of Control):控制反转
控制反转不是一种技术,而是一种思想,首先要理解为什么要叫控制反转,我们在传统javase里面去创建对象的时候,需要通过手动new一个对象来进行创建,属于程序主动去创建一个依赖对象,而现在Ioc有一个容器去帮我们管理这些对象的创建,那么我们就可以理解为是Ioc容器去控制这些依赖对象的创建。那什么是反转呢,为什么要叫反转,我们进行传统的创建对象时,是我们主动去创建依赖对象,这叫 正转,而现在是由容器帮忙来创建以及注入依赖对象,所以叫做反转,因为容器在帮我们去进行对象的创建时候,对象只是被动的接收依赖对象,所以是反转,也叫依赖的对象被反转了。合起来这也就是控制反转的概念。
DI:依赖注入(Dependency Injection)
同样我们去理解依赖注入的时候,也像这么去理解,谁依赖了谁,为什么要依赖,谁注入了谁 ,注入了什么。
●谁依赖于谁:当然是应用程序依赖于IoC容器;
●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
Spring的优点
1.低侵入式设计
2.独立于各种应用服务器
3.依赖注入特性将组件之间的关系透明化,降低了耦合度
4.面向切面编程允许将 通用任务进行集中式处理
5.与第三方框架的良好整合。
Spring工程的构建
首先我们需要创建一个maven项目,在pom文件中添加依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
Spring资源文件的编写
同样,我们需要在resources资源文件包下面新建一个Spring的资源文件,在文件里面写下面这段代码
<?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">
</beans>
完成控制反转和依赖注入
<bean id="userInfo" class="com.domain.UserInfo">
<!--完成依赖注入 DI-->
<property name="username" value="张三" />
<property name="content" value="刘家豪大笨蛋!" />
</bean>
bean的配置,id为你要注入的哪个对象,class为这个对象的全限定类名,property为你要为这个对象的变量去进行注入值,name为属性名,value为属性值
补充:在同一个配置文件下,bean的id只能有一个,不能重复,如果重复将会报错,报错信息如下
再次补充,如果你的变量是普通类型变量,那么就用value赋值,如果你的变量是对象级别的变量,例如接口,那么不能用value,只能用ref,去ref你已经实例化好的类,name同样是拟注入这个对象里面的变量名,下面是例子:
<!--纸张实现类-->
<bean id="a4Paper" class="com.csi.domain.impl.A4Paper" />
<bean id="b5Paper" class="com.csi.domain.impl.B5Paper" />
<!--喷墨实现类-->
<bean id="blackInk" class="com.csi.domain.impl.BlackInkBox" />
<bean id="colorInk" class="com.csi.domain.impl.ColorInkBox" />
<!--组装打印机-->
<!--bean代表着一个类,id代表你实例化对象后的那个对象名,class为你要实例化的这个类的全限定类名-->
<bean