概述 Bean配置信息:
即Bean的元数据信息,包括Bean的实现类,属性信息,依赖关系和行为配置(生命周期及生命周期过程中的回调函数)
容器内部协作接口
文章插图
首先,容器会根据Bean的配置信息,在容器内部建立Bean定义注册表(一个个对象),然后根据注册表实例化Bean,并建立Bean和Bean之间的依赖关系,最后将这些准备就绪的Bean放入缓存池中,供外部的应用程序使用
Bean基本配置
基于XML文件的配置方式如下
除了使用id为Bean命名,还可以使用name为Bean命名,name属性支持多个命名,可以使用空格,分号,或逗号分开
依赖注入
支持3种方式的注入,分别是属性注入,构造函数注入和工厂方法注入
属性注入
通过属性的()方法进行注入,要求Bean必须提供一个默认的构造函数,并为需要注入的属性提供()方法
public class Car {private String brand;private String color;private String maxSpeed;public void setBrand(String brand) {this.brand = brand;}public void setColor(String color) {this.color = color;}public void setMaxSpeed(String maxSpeed) {this.maxSpeed = maxSpeed;}public void introduce() {System.out.println("brand:" + this.brand + ";color:" + this.color + ";maxSpeed:" + this.maxSpeed);}}"brand" value="http://www.kingceram.com/post/影刺HT+">"color" value="http://www.kingceram.com/post/黑色">"maxSpeed" value="http://www.kingceram.com/post/300">
注意,只会检查Bean中是否有对应的方法,并不关心是否有该属性,例如上面Car类中有()方法,但却不一定要有brand属性
构造函数注入
使用构造函数注入,要求Bean必须提供带参数的构造函数 。例如上面的Car类,提供一个带参数的构造函数 。
public Car(String brand,String color,String maxSpeed) {this.brand = brand;this.color = color;this.maxSpeed = maxSpeed;}
bean.xml配置如下:
构造函数注入还提供按索引和按参数类型匹配入参的功能,可以使用-arg标签下的type属性和index属性配置 。
注意:循环依赖问题
考虑下面的例子:
Car类的构造函数
public Car(String brand,String color,String maxSpeed,Boss boss) {this.brand = brand;this.color = color;this.maxSpeed = maxSpeed;this.boss = boss;}
Boss类的构造函数
public Boss(String name,Car car) {this.name = name;this.car = car;}
bean.xml配置:
- 超详细解读+快速入门 一文快速了解ClickHouse 战斗民族的开源搜索引擎
- 寄存器操作 8、stm32F103入门学习--点亮LED(向库函数操作迈进!)
- 用GitHub Copilot在Vs Code里快速写代码,最详细使用教程
- 小白入门必学 | 一文带你快速了解计算机视觉
- 腾讯游戏信用分怎么快速恢复
- 1 Python新手入门———条件判断
- 如何对Word表格进行快速计算
- 3 机器学习系列_逻辑回归应用之Kaggle泰坦尼克之灾
- 如何快速拿下科目二
- Windows Server入门系列31 利用LC5破解用户密码