码迷,mamicode.com
首页 > 编程语言 > 详细

Spring学习-01 IOC

时间:2021-06-05 17:47:21      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:coding   开启   and   autowired   单例模式   required   array   auto   一、基本概念   

一、基本概念

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、注入List集合类型属性时,需要使用到list标签和value标签

技术图片

5、注入Map集合类型属性时,需要使用map标签和entry标签(通过entry标签的key和value属性进行key和value的设置)

技术图片

6、注入Set集合类型属性时,需要使用set标签和value标签

技术图片

  • 通过构造方法实现注入
    • 方式一:通过参数类型匹配

 技术图片

    • 方式二:通过参数索引位置

技术图片

  • 使用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属性进行自动注入
    1. byType:按照类型进行自动注入
    2. 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

    • 可以出现在属性、构造方法、成员方法上
    • @AutoWired(required=”false”)允许空值

    • 使用@AutoWired之后不需要有setter方法

注意:如果有多个相同的类型的bean存在,但是有一个bean的名称和注解修饰的属性名相同,就会按名称匹配而自动注入,而不会抛出多个bean匹配的异常。

技术图片

2、@Qualifier:更具属性名称进行注入,一般配合@Autowired一起使用

3、@Resource:可以根据类型注入,也可以根据名称注入(属于javax包而不属于spring本身带的注解)

默认优先根据名称查找并注入,没有指定name的话默认值是该注解修饰的属性名或setter方法名,如果名称无法找不到就会更根据类型进行查找并注入。

4、@Value:可以注入普通类型属性(八大基本类型 + String字符串类型)

Spring学习-01 IOC

标签:coding   开启   and   autowired   单例模式   required   array   auto   一、基本概念   

原文地址:https://www.cnblogs.com/unistart/p/14847545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!