文章目录:
1.Spring IoC的基本概念
控制反转(IoC,Inversion of Control),是一个理论,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。
也就是说,指导开发人员如何使用对象、管理对象,把对象的创建、属性赋值、声明周期都交给代码之外的容器管理。
1.1 IoC中的控制和反转
控制:对象创建、属性赋值,声明周期管理。
反转:把开发人员管理对象的权限转移给了代码之外的容器实现,由容器完成对象的管理。
正转:开发人员在代码中,使用 new 构造方法创建对象,开发人员掌握了对象的创建、属性赋值,对象从开始到销毁的全部过程,开发人员都具有对对象的全部控制权限。
通过容器,可以使用容器中的对象(容器已经创建了对象,对对象属性赋值了,对象也组装好了)。
其实Spring就是一个容器,可以管理对象、创建对象、给对象属性赋值。
1.2 IoC的技术实现
DI(Dependency Injection,依赖注入),程序代码不做定位查询,这些工作由容器自行完成。
依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系的管理。
1.3 Spring框架使用DI实现IoC
Spring框架使用依赖注入(DI)实现 IoC。
Spring容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些Java 对象被称为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用“依赖注入”的方式来管理 Bean 之间的依赖关系。使用 IoC 实现对象之间的解耦和。
通过Spring框架,只需要提供要使用的对象名词就可以了,从容器中获取名称对应的对象。
SPringle底层使用的反射机制,通过反射创建对象及其属性。
2.搭建Spring框架
首先 File → New → Project → 选择最下面的空项目(Empty Project),创建一个空项目。
2.1 创建Maven项目
在空项目中,新建一个模块,使用Maven。
2.2 对项目中的某些特定内容进行修改
上面这些都完成之后,可以看到下图所示的Spring框架的结构:👇👇👇(将图中所示的包下的两个类删掉,那是默认创建的,我们不需要),同时在main目录下新建一个 resources 目录,将文件类型修改为 Resources Root。
在 bjpowernode 包下,新创建一个 service 包,其中有一个接口。
2.3 在pom.xml文件中加入相关依赖
<!-- spring依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency>
<!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
package com.bjpowernode.service; /** * */ public interface SomeService { void doSome(); }
package com.bjpowernode.service.impl; import com.bjpowernode.service.SomeService; public class SomeServiceImpl implements SomeService { /** * spring默认使用的是无参构造方法来创建对象 * 如果定义了有参构造方法,应该再定义一个无参构造方法 */ public SomeServiceImpl() { System.out.println("SomeServiceImpl的无参构造方法"); } @Override public void doSome() { System.out.println("执行了业务方法doSome()"); } }
在 resources 目录下,创建一个名为 beans 的xml文件。(beans.xml)
<?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: 自定义对象名称,唯一值 (可以没有,spring可以提供默认名称) class: 类的全限定名称,spring通过反射机制创建对象,不能是接口 spring根据id、class创建对象,把对象放入到spring的一个map对象中 map.put(id,对象) --> <bean id="someService" class="com.bjpowernode.service.impl.SomeServiceImpl" /> </beans>
package com.bjpowernode; import com.bjpowernode.service.SomeService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * */ public class MyTest { //spring创建对象,调用类的哪个方法? //默认使用的是无参构造方法来创建对象 @Test public void test01() { String config="beans.xml"; /* * 创建spring容器对象的时候,会读取配置文件,创建文件中声明的Java对象 * 优点:获取对象的速度快,因为对象已经创建好了 * 缺点:占用内存 */ ApplicationContext ctx=new ClassPathXmlApplicationContext(config); SomeService service=ctx.getBean(SomeService.class); service.doSome(); } }
写在结尾:Spring框架搭建的基本流程
使用Spring:Spring作为容器管理对象,开发人员从Spring中获取要使用的对象。 实现步骤: 1.新建Maven项目 2.加入依赖,修改pom.xml spring-context:spring依赖 junit:单元测试 3.开发人员定义类:接口和实现类(类也可以没有接口) 4.创建spring配置文件,作用:声明对象。 把对象交给spring创建和管理。 使用<bean>表示对象声明,一个bean表示一个Java对象 5.使用容器中的对象。 创建一个表示spring容器的对象:Application 从容器中,根据名称获取对象,使用getBean("对象名称")