IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring IOC容器的理解(二) -> 正文阅读

[Java知识库]Spring IOC容器的理解(二)

基于XML管理bean

实验一 [重要]创建bean

实验二 [重要]获取bean

实验三 [重要]给bean的属性赋值:setter注入

实验四 [重要]给bean的属性赋值:引用外部已声明的bean

实验五 [重要]给bean的属性赋值:内部bean

实验六 [重要]给bean的属性赋值:引入外部属性文件

实验七 给bean的属性赋值:级联属性赋值

实验八 给bean的属性赋值:构造器注入

实验九 给bean的属性赋值:特殊值处理

实验十 给bean的属性赋值:使用p名称空间

实验十一 给bean的属性赋值:集合属性

实验十二 自动装配

实验十三 集合类型的bean

实验十四 FactoryBean机制

实验十五 bean的作用域 ?

实验十六 bean的生命周期

实验一 [重要]创建bean

1、实验目标和思路

①目标

由 Spring 的 IOC 容器创建类的对象。

②思路

?

2、创建Maven Module

<dependencies>
 ? ?<!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 -->
 ? ?<dependency>
 ? ? ? ?<groupId>org.springframework</groupId>
 ? ? ? ?<artifactId>spring-context</artifactId>
 ? ? ? ?<version>5.3.1</version>
 ? ?</dependency>
 ? ?<!-- junit测试 -->
 ? ?<dependency>
 ? ? ? ?<groupId>junit</groupId>
 ? ? ? ?<artifactId>junit</artifactId>
 ? ? ? ?<version>4.12</version>
 ? ? ? ?<scope>test</scope>
 ? ?</dependency>
</dependencies>

3、创建组件类

package com.atguigu.ioc.component; 
public class HappyComponent {
 ? ?public void doWork() {
 ? ? ? ?System.out.println("component do work ...");
 ?  } 
}

4、创建 Spring 配置文件

?

?

5、配置组件

1.<!-- 实验一 [重要]创建bean -->

2.<bean id="happyComponent" class="com.atguigu.ioc.component.HappyComponent"/>

  • bean标签:通过配置bean标签告诉IOC容器需要创建对象的组件是什么
  • id属性:bean的唯一标识
  • class属性:组件类的全类名

6、创建测试类

public class IOCTest {
    
    // 创建 IOC 容器对象,为便于其他实验方法使用声明为成员变量
    private ApplicationContext iocContainer = new ClassPathXmlApplicationContext("applicationContext.xml");
    
    @Test
    public void testExperiment01() {
    
        // 从 IOC 容器对象中获取bean,也就是组件对象
        HappyComponent happyComponent = (HappyComponent) iocContainer.getBean("happyComponent");
    
        happyComponent.doWork();
    
    }
    
}

7、无参构造器

Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象,这一点需要注意。如果在需要无参构造器时,没有无参构造器,则会抛出下面的异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'happyComponent1' defined in class path resource [applicationContext.xml]: Instantiation of bean failed;

nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.atguigu.ioc.component.HappyComponent]: No default constructor found;

nested exception is java.lang.NoSuchMethodException: com.atguigu.ioc.component.HappyComponent.()

所以对一个JavaBean来说,无参构造器和属性的getXxx()、setXxx()方法是必须存在的,特别是在框架中。

8、用IOC容器创建对象和自己建区别

?

在Spring环境下能够享受到的所有福利,都必须通过 IOC 容器附加到组件类上,所以随着我们在 Spring 中学习的功能越来越多,IOC 容器创建的组件类的对象就会比自己 new 的对象强大的越来越多。

实验二 [重要]获取bean

1、方式一:根据id获取

由于 id 属性指定了 bean 的唯一标识,所以根据 bean 标签的 id 属性可以精确获取到一个组件对象。上个实验中我们使用的就是这种方式。

2、方式二:根据类型获取

①指定类型的 bean 唯一

@Test

public void testExperiment02() { 
 ? ?HappyComponent component = iocContainer.getBean(HappyComponent.class); 
 ? ?component.doWork();
}

②指令类型的 bean 不唯一

相同类型的 bean 在IOC容器中一共配置了两个:

<!-- 实验一 [重要]创建bean -->

<bean id="happyComponent" class="com.Tim.ioc.component.HappyComponent"/>
<!-- 实验二 [重要]获取bean -->
<bean id="happyComponent2" class="com.Tim.ioc.component.HappyComponent"/>

根据类型获取时会抛出异常:

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.atguigu.ioc.component.HappyComponent' available: expected single matching bean but found 2: happyComponent,happyComponent2

③思考

如果组件类实现了接口,根据接口类型可以获取 bean 吗?

可以,前提是bean唯一

如果一个接口有多个实现类,这些实现类都配置了 bean,根据接口类型可以获取 bean 吗?

不行,因为bean不唯一

④结论

根据类型来获取bean时,在满足bean唯一性的前提下,其实只是看:『对象 instanceof 指定的类型』的返回结果,只要返回的是true就可以认定为和类型匹配,能够获取到。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:57:16  更:2022-04-04 12:01:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:55:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码