Spring两大核心功能:IOC控制反转、AOP面向切面的编程
一、IOC控制反转
1.1、控制反转和依赖注入的概念:
控制反转(loC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。由容器代替开发人员创建对象,管理对象,给属性赋值。
Spring使用的是DI依赖注入实现了IOC的功能,Spring是一个容器,底层创建对象,使用的是反射机制。
DI:依赖注入,表示创建对象,给属性赋值。
1.2、依赖注入的实现方式和语法分类:
实现方式有两种:
- 在Spring的配置文件中,使用标签和属性完成,叫做基于XML配置文件的依赖注入;
- 使用Spring中的注解,完成属性赋值,叫做基于注解的依赖注入;
语法分类:
- set注入(设置注入) : Spring调用类的set方法,在set方法实现属性的赋值,80%左右都是使用的set注入
- 构造注入:Spring调用类的有参数构造方法,创建对象,在构造方法中完成赋值。
1.3、基于配置文件的依赖注入之set注入:
1、创建Maven项目
2、加入Maven依赖:Spring依赖版本5.2.5、junit依赖
3、创建类
4、创建Spring需要使用的配置文件:在这个文件中,我们声明类的信息,声明的类就由容器来创建对象和管理
5、测试
1.3.1、:创建Maven项目并加入相关依赖:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
1.3.2、创建类:
public class Student {
private String name;
private Integer age;
private School school;
//省略set get 构造方法 toString()
public class School {
private String name;
private String address;
1.3.3、创建Spring的配置文件:applicationContext.xml默认名
这个是spring配置的标准格式,任何一个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">
<!--
这个是spring配置的标准格式,任何一个spring的配置文件都需要有上面的内容
spring-beans.xsd :约束文件,约束和限制这个配置文件中可以出现的标签和属性
-->
<!--声明Bean,告诉Spring你要创建哪个类的对象
声明myStudent对象-->
<bean id= "myStudent" class = "com.lifang.ba01.Student">
<property name = "name" value = "李四lisi"/> <!--setName("李四lisi")-->
<property name = "age" value = "22"/> <!--setAge(22)-->
<!--引用类型-->
<property name = "school" ref = "mySchool"/> <!--setSchool(mySchool)-->
</bean>
<!--声明mySchool对象-->
<bean id = "mySchool" class = "com.lifang.ba01.School">
<property name = "name" value = "北京大学"/>
<property name = "address" value = "北京海淀区"/>
</bean>
</beans>
set注入:先执行无参构造方法创建对象,再调用set方法完成属性赋值,并且spring只帮你调用set方法,在set方法里面怎么写,由你自己决定,所以命名规范很重要
Spring中的基本数据类型和String类型统称为简单类型
注入就是赋值,di:给属性赋值
1、set注入(设值注入),先执行无参构造方法创建对象,再调用set方法完成属性赋值,并且spring只帮你调用set方法,在set方法里面怎么写,由你自己决定,只要这个类中有对应的set方法就生效,所以命名规范很重要
1)简单类型的set注入:
<bean id = "对象的自定义名称" class = "类的全限定名称">
<property name = "属性名" value = "属性值" />
<property name = "email" value = "123456@qq.com" >
<property name = "age" value = "22" >
一个property只能给一个属性赋值,并且不管什么类型的属性值要在双引号中,这是.xml文件的规则
</bean>
- id:对象的自定义名称,唯一值,Spring通过这个名称找到对象
- class:类的全限定名称,不能是接口,因为Spring是通过反射机制创建对象,必须使用类
- Spring会把创建好的对象放入到Map中,Spring框架有一个map存放对象的,
- springMap.put(id的值,对象),例如:springMap.put("mySchool", new School())
2)引用类型的set注入:
<bean id = "xxx" class = "yyy">
<property name = "属性名称" ref = "bean的id(对象的名称)">
</bean>