Spring学习-01 IOC
时间:2021-06-05 17:47:21
收藏:0
阅读:0
一、基本概念
1、什么是IOC?
IOC(Inversion of Control)即控制反转,是指将对象的创建交给Spring框架进行处理和管理,不需要我们进行手动的对象创建和管理。
2、什么是DI?
DI(Dependency Injection)即依赖注入,它是实现IOC的一种手段。
二、DI的实现方式
- 依赖setter方法实现注入
主要通过property标签进行属性注入,通过name属性指定需要注入的属性名,value指定需要注入的值
1、注入八大基本类型和String类型的属性时:
2、注入引用类型属性时,可以使用内部bean的形式进行属性注入:
除此之外,还可以使用级联赋值的方式:
-
- 写法一:通过ref属性引用另一个bean标签
-
- 写法二:直接使用“对象.属性”的形式对引用类型的属性进行属性值注入(需要对应属性有setter方法)
3、注入数组类型属性时,需要使用到array标签和value标签
4、
- 通过构造方法实现注入
- 方式一:通过参数类型匹配
-
- 方式二:通过参数索引位置
- 使用p命名空间的方式(基于xml配置)
首先需要在xml配置文件中引入p命名空间
基本使用语法:p:属性名=属性值,使用示例如下:
<?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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
........
<!-- 进行属性注入,p:属性名=属性值 -->
<bean id="humanBean2" class="spring.bean.animal.Human" p:name="Judy" p:age="34" p:pet-ref="tiger2">
</bean>
.......
</beans>
补充点:
- 通过指定primary属性进行优先注入,可以解决由于相同类型的bean有多个匹配而导致注入失败的问题
- 使用bean标签的autowired属性进行自动注入
-
- byType:按照类型进行自动注入
- byName:按照名称进行自动注入
-
IOC操作Bean管理(bean作用域)
1、在bean标签中使用scope属性,可选值:
-
- singleton表示是单例模式创建(默认值)
- prototype表示是原型模式创建
2、singleton和prototype的区别
-
- scope值是singleton时,加载spring配置文件时就会创建单实例对象
- scope值是prototype时,在使用getBean时才会创建多实例对象
- 使用bean标签的lazy-init属性实现bean创建的懒加载
- 当值为false时(默认值),在Spring容器启动时就会创建出bean对象。
- 当值为true时,开启懒加载,当Spring容器启动不会直接创建出bean对象,只有调用getBean方法获取对象时才创建出bean对象。
- 使用注解的方式实现注入
1、@AutoWired:根据属性类型进行自动装配
如果出现多个符合的bean需要使用@Qualifier注解进行指定或者再要注入的bean中添加属性primary=true
-
- 可以出现在属性、构造方法、成员方法上
-
-
2、@Qualifier:更具属性名称进行注入,一般配合@Autowired一起使用
3、@Resource:可以根据类型注入,也可以根据名称注入(属于javax包而不属于spring本身带的注解)
默认优先根据名称查找并注入,没有指定name的话默认值是该注解修饰的属性名或setter方法名,如果名称无法找不到就会更根据类型进行查找并注入。
4、@Value:可以注入普通类型属性(八大基本类型 + String字符串类型)
评论(0)