基于XML配置Bean和基于XML自动装配

目录

基于XML配置Bean

id分配规则

通过id获取bean

通过类型获取bean

通过C命名空间配置bean

使用C命名空间

通过P命名空间配置bean

通过util:list进行配置bean

指定id,直接ref引用过来

通过外部属性文件配置Bean

Bean信息重用(继承)

基于XML自动装配

byName

byType


基于XML配置Bean

private ConcurrentHashMap<String,Object> singletonObejcts = new ConcurrentHashMap();

xml中存放bean的唯一id、全路径以及属性信息

**反射创建对象,**默认会调用无参构造方法

将id和对象放入单例池 Map<String**(id)** ,Object**(bean)**>

解析xml配置文件就会创建xml里设置的所有对象

new ClassPathXmlApplicationContext("s1.xml",""s2.xml");可以写多个xml文件,可变长

不一定是自定义的bean,可以是系统存在的类,如Date

<bean id="birthBean" class="java.util.Date"/>

BeanFactory是ioc容器的顶级接口,负责创建Bean对象,是一个工厂

也可以用BeanFactory代替ApplicationContext

id分配规则

bean不带id,系统会默认分配id,分配id的规则是 全类名#0, 全类名#1

通过id获取bean

通过类型获取bean

要求ioc容器中的同一个类的bean只能有一个

**应用场景:**比如Servlet/Controller/Service 在一个线程中只需要一个对象实例(单例)的情况

通过C命名空间配置bean

不使用C命名空间

1. constructor-arg标签可以指定使用构造器的参数
2. index表示构造器的第几个参数 从0开始计算的
3. 除了可以通过index 还可以通过 name / type 来指定参数方式
4. 类的构造器,不能有完全相同类型和顺序的构造器,所以可以通过type来指定

使用C命名空间

构造器注入的一种快捷实现方式

必须存在有参构造器

可以不要get、set方法

通过P命名空间配置bean

set注入的一种快捷实现方式

必须存在set方法和无参构造器

可以不要有参构造器

通过util:list进行配置bean

必须存在set方法

指定id,直接ref引用过来

通过外部属性文件配置Bean

必须存在set方法

在resoureces目录下新建xx.properties

Bean信息重用(继承)

基于XML自动装配

自动装配:Spring会在上下文中自动查找,并自动给Bean装配与其相关的属性

在xml配置文件中的bean标签中加入一个属性autowire:一般是byName或byType

byName

通过名字完成自动装配(必须要有set方法)

1、找class对应实体类

2、看属性的setXxx方法中的Xxx,然后首字母小写xxx

3、在配置文件中查找 id=xxx 的Bean

byType

Spring会自动寻找一个与该属性类型相同的Bean,注入进来,保证类型中是唯一的Bean

相关推荐
xyy20258 小时前
Spring事务的传播方式
java·数据库·spring
不能再留遗憾了13 小时前
【SpringCloud】Sentinel
spring·spring cloud·sentinel
whltaoin14 小时前
AI 超级智能体全栈项目阶段五:RAG 四大流程详解、最佳实践与调优(基于 Spring AI 实现)
java·人工智能·spring·rag·springai
心勤则明14 小时前
Spring AI 文档ETL实战:集成text-embedding-v4 与 Milvus
人工智能·spring·etl
艾菜籽15 小时前
Spring Web MVC入门补充1
java·后端·spring·mvc
艾菜籽17 小时前
Spring MVC入门补充2
java·spring·mvc
为java加瓦21 小时前
Spring 方法注入机制深度解析:Lookup与Replace Method原理与应用
java·数据库·spring
无名客021 小时前
SpringCloud中的网关(Gateway)的作用是什么?
spring·spring cloud·gateway
hrrrrb1 天前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶1 天前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring