【Spring5】Spring5基础教程(2)
前言:
本文内容:IOC本质,HelloSpring、IOC创建对象方式
推荐免费Spring5基础教程视频:【狂神说Java】Spring5最新完整教程IDEA版通俗易懂_哔哩哔哩_bilibili
IOC本质
控制反转IOC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IOC的一种方法,也有人认为DI只是IOC的另一种说法。所谓控制反转,就是获得依赖对象的方式反转了。
IOC是Spring框架的核心内容,使用多种方式完美实现IOC,可以使用XML配置,也可以使用注解,新版本可以零配置实现IOC。
Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建和组织对象存入容器中,程序使用时再从IOC中取出需要的对象
采用XML方式配置Bean的时候,Bean的定义信息和实现分离,而采用注解的方式可以把连着合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
总结
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式,在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入DI
HelloSpring
-
新建一个
Maven
父工程Spring-Study
并引入依赖1
2
3
4
5
6<!--Spring Web MVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.19</version>
</dependency> -
新建一个模块
spring-02-hellospring
-
编写一个
Hello
实体类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32package com.jokerdig.pojo;
/**
* @author Joker大雄
* @data 2022/5/11 - 10:49
**/
public class Hello {
private String name;
public Hello(String name) {
this.name = name;
}
public Hello() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Hello{" +
"name='" + name + '\'' +
'}';
}
} -
在resources新建
beans.xml
(applicationContext.xml
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 使用spring创建对象 spring都称为Bean
正常创建
类型 变量名 = new 类型();
Hello hello = new Hello();
id = 变量名
class = new对象
property 相当于为对象属性赋值
这里的赋值还是使用pojo中的set方法
-->
<bean id="hello" class="com.jokerdig.test.pojo.Hello">
<!-- name 实体类中定义的变量
ref 引用Spring容器中创建好的对象
value 具体的值
-->
<property name="name" value="Spring"/>
</bean>
</beans> -
创建测试类进行调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package com.jokerdig.test;
import com.jokerdig.test.pojo.Hello;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author Joker大雄
* @data 2022/5/11 - 11:00
**/
public class test {
// 这里使用IDEA导入junit的相关依赖
public void test(){
// 允许容器从各种外部资源(如本地文件系统、Java 等)加载配置元数据
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 通过context拿到我们需要的值
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello.toString());
}
} -
运行结果
1
2
3Hello{name='Spring'}
Process finished with exit code 0
现在我们若要修改内容,不需要去改代码,而是修改对应的配置文件即可(降低耦合)
IOC创建对象方式
-
Spring使用无参构造创建对象(默认)
1
2
3
4<!-- 这里本质使用实体类的无参构造 默认-->
<bean name="user" class="com.jokerdig.pojo.User">
<property name="name" value="Joker大雄"/>
</bean> -
Spring通过有参构造创建对象
-
通过索引创建
1
2
3
4<!--使用下标赋值 不需要无参构造-->
<bean id="index" class="com.jokerdig.pojo.User">
<constructor-arg index="0" value="Joker大雄"/>
</bean> -
通过类型创建
1
2
3
4<!-- 通过参数类型 不建议使用-->
<bean id="type" class="com.jokerdig.pojo.User">
<constructor-arg type="java.lang.String" value="Joker大雄"/>
</bean> -
通过参数名创建
1
2
3
4<!-- 直接通过参数名设置 -->
<bean id="user1" class="com.jokerdig.pojo.User">
<constructor-arg name="name" value="Joker大雄"/>
</bean>
-
总结:在配置文件加载的时候,容器中管理的对象就已经初始化了!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hey,Joker!
评论
ValineTwikoo