Spring——IOC
Posted 我要进阿里!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring——IOC相关的知识,希望对你有一定的参考价值。
声明:本博客仅仅是一个初学者的学习记录、心得总结,其中肯定有许多错误,不具有参考价值,欢迎大佬指正,谢谢!想和我交流、一起学习、一起进步的朋友可以加我微信Liu__66666666
这是简单学习一遍之后的记录,后期还会修改。
一、Bean
“Bean”本意为”豆子“,豆子本身就是种子,种豆得豆;而在java中,“类”又叫“javaBean”,就相当于种子,我们可以通过类来创建对象,例如有个Apple类,那我们就可以通过这个类来获得Apple实例对象。
我们都知道Spring是通过容器来管理Bean的,其实容器中内容的基本单位就是bean,Spring中有很多个bean,每个bean对应一个javaBean。
二、控制反转(IoC)
我们如果想种苹果的话,需要自己亲手种,这样很麻烦。那怎么办呢?现在有家店,你给他苹果种子,他就可以帮你种树,并将成熟的苹果交给你;而Spring就相当于这家店,你把JavaBean给他,他就把Bean放在容器里培养,当你需要一个实例对象的时候,他就会给你,就完全省去了我们手动创建对象的过程。
<img src="https://img2018.cnblogs.com/blog/1799182/201909/1799182-20190922131158405-811366751.png" alt="image-20190922113348386" style="zoom:50%;" margin="0 auto"/>
-
控制反转配置方式
- 基于XML
- 无参构造方式
- 静态工厂方式
- 实例工厂方式
- 基于注解
- 基于XML
-
一个基于XML配置的控制反转Demo
-
创建一个项目(建议通过Maven/Gradle来管理项目,本文使用Maven)
-
导入jar包:通过Maven/Gradle等自动导入或手动下载导入
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.0.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.1.0.RELEASE</version> </dependency>
-
在java或resources目录下创建applicationContext.xml文件,它是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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> </beans>
-
在src/main/java/ioc下创建Apple.java类
package ioc; public class Apple { private Integer id; private String color; public Apple() { } // 此处略去所有getter、setter方法 //此处略去toString方法 }
-
在applicationContext.xml中将Apple这个类添加到Spring容器中
<?xml version="1.0" encoding="UTF-8"?> <!--这里为了省空间直接把beans里面的属性省略掉了--> <beans> <!--这样配置的话,Spring会使用javaBean中的无参构造帮我们实例化对象--> <!--所以一定要写无参构造--> <bean id="apple" class="ioc.Apple"/> </beans>
bean标签里的id属性,是每个bean的唯一标识,我们可以在java代码中通过这个id获取到该bean对应的实例对象;class属性是该类的全限定名。
-
编写测试类
public class AppleTest { //考虑到部分朋友没接触过Junit所以这里就这样简单测试下 public static void main(String[] args) { //这里获取的是applicationContext.xml这个配置文件的对象 //通过它可以获取配置文件中配置的bean对象 ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); //调用ApplicationContext的getBean(String id,Class<T> clazz)方法 //获取对应的实例对象,我们定义了apple所以就写上”apple“ Apple apple = context.getBean("apple", Apple.class); //获取到对象之后就可以正常使用了 apple.setId(1); apple.setColor("green"); System.out.println(apple); } }
输出结果:
Apple{id=1, color=\'green\'}
OK,是我们预期的结果。经过一顿操作是不是觉得Spring好像也很麻烦?但是Spring不这样用,这只是个demo,实际用起来会非常方便简洁。
-
-
一个基于注解的控制反转Demo
-
创建项目(建议通过Maven/Gradle来管理项目,本文使用Maven)
-
导入jar包,见上文“一个基于XML配置的控制反转Demo”
-
创建applicationContext.xml和Apple类(同上)
-
为Apple类添加注解(就不用配bean标签了)
@Component public class Apple {}
id默认为类名的首字母小写形式,例如Apple的id为apple,AppleService的id为appleService
也可使用value属性指定:
@Component(value = "apple")
注解写在类声明的上方,注解有@Component、@Controller、@Service、@Repository,这四个注解的作用完全相同,设计四个主要为了区分不同的层,例如@Controller是用于视图控制层、@Service用于服务层、@Repository用于持久层。当然,如果在持久层用@Controller也不会报错,但是不建议这样写。
-
在applicationContext.xml开启注解并配置包扫描
-
开启注解:
<context:annotation-config/>
-
配置包扫描(就是设置一下让Spring帮我们自动扫描哪些包,例如设置了名为ioc的这个包,那ioc这个包下所有添加了@Component/@Controller/@Service/@Repository注解的JavaBean都会被自动添加到Spring 的容器中)
<context:component-scan base-package="ioc"/>
bese-package这个属性可以配置多个包,以半角逗号分隔,例如base-package=“ioc,mvc”
-
-
编写测试类
public class AppleTest { public static void main(String[] args) { ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); Apple apple = context.getBean("apple", Apple.class); apple.setId(1); apple.setColor("green"); System.out.println(apple); } }
输出结果:
Apple{id=1, color=\'green\'}
OK,结果还是符合预期。
-
-
总结
- 基于XML和无参构造配置的IoC:
- 导入jar包
- 创建applicationContext.xml文件
- 创建JavaBean
- 在applicationContext.xml中使用
标签将JavaBean添加到Spring容器中 - java代码通过
中的id属性获得对应实例对象并使用
- 基于注解配置的IoC:
- 导入jar包
- 创建applicationContext.xml文件,开启注解并配置包扫描
- 创建JavaBean并为其添加注解
- 在java代码中通过id来获得实例对象并使用
- 基于XML和无参构造配置的IoC:
以上是关于Spring——IOC的主要内容,如果未能解决你的问题,请参考以下文章