IOC

以下内容是我最近在学习 Spring Boot Spring MVC 过程中,针对 ioc 控制反转所了解到的内容。

实践步骤

  • 使用 Spring Boot, Spring 如何实现 IOC
  • 使用 maven

java oop : 每次都是自己 new 对象,不够方便,核心原因是产生了代码的偶合。

目标:希望容器给我对象,直接获得对象;

IOC: 控制反转,表示把对象的控制权交给容器

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 @Bean
public Student getStudent(){
Student stu = new Student();
stu.setName("糖葫芦");
stu.setAge("18");
return stu;
}

在另外一个类 SpringBootIocApplicationTests.java 中:
@Autowired
Student student;

@Test
public void contextLoads() {
//这里可以直接拿到
System.out.println("student:"+student.getName());
//student:糖葫芦
}

Maven 项目

如果不用 Spring Boot ,创建 Maven 项目进行实现:

  • 使用 ide 创建 maven 项目

    image.png

注意勾选 create from..

要实现控制反转,需要我们导入 Spring Context 配置,在 maven 官网:

image.png

搜索 Spring, 底下有很多版本,导入你想导入的版本,点击进去,看到:

image.png

将红色框部分,拷贝到 项目的 pom.xml 文件中,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<project

......
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
</dependencies>

</project>

然后我们还需要手动设置配置文件:在 resources 文件夹下,创建一个 xml ,我们可以这么创建 xml,可以帮助我们自带一些配置,如下:

image.png

applicationContext.xml :

1
2
3
4
5
6
7
8
9
10
<?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">

<bean id="student" class="Student"><!--将这个bean加入到spring的ioc容器-->
<property name="name" value="糖葫芦"></property><!--给bean的pname属性赋值-->
<property name="age" value="18"></property>
</bean>
</beans>

最后,如何获取呢?通过 ApplicationContext 获取:

1
2
3
4
5
6
7
8
9
public static void main(String[] args){

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//传入xml 中定义的bean 的 id
Student student = (Student) context.getBean("student");

System.out.println("student::"+student.getName()+ "::::age::"+student.getAge());

}

这样我们就可以拿到我们在 xml 中定义的 bean 的内容了。

-------------本文结束感谢您的阅读-------------