SpringBeanFactory

SpringBeanFactory的开发步骤:

1.导入依赖

因为Bean Factory是Spring提供的,所以我们需要提供依赖

XML 复制代码
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.7</version>
        </dependency>
    </dependencies>

2.创建一个bean

创建UserService和它的实现类UserServiceImpl

3.编写配置文件

在resource目录下创建bean.xml

id是bean对象的名字

class是实现类的全类名

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="com.qcby.service.impl.UserServiceImpl"></bean>
</beans>

4.编写测试代码

创建测试类BeanTest:

java 复制代码
package com.qcby;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.ClassPathResource;

public class BeanTest {
    public static void main(String[] args) {

        //创建工厂对象
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        //创建一个读取器
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
        //读取器绑定工厂
        reader.loadBeanDefinitions(new ClassPathResource("bean.xml"));
        //根据id获取bean示例对象
        Object userService=beanFactory.getBean("userService");
        System.out.println(userService);
    }
}

运行,打印了地址,说明工厂帮我们创建了实例对象

5.依赖注入

1.创建UserDao接口和实现类UserDaoImpl

2.在UserServiceImpl里面写set方法

java 复制代码
package com.qcby.service.impl;

import com.qcby.dao.UserDao;
import com.qcby.service.UserService;

public class UserServiceImpl implements UserService {
    public void setUserDao(UserDao userDao) {
        System.out.println("UserDao被创建:"+userDao);
    }
}

3.配置文件

配置UserDao的Bean和UserServiceImpl的属性:

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="com.qcby.service.impl.UserServiceImpl">
        <!--name是方法setXXX里面的XXX ref是去容器里面找什么bean-->
        <property name="userDao" ref="userDao"></property>
    </bean>

    <bean id="userDao" class="com.qcby.dao.Impl.UserDaoImpl"></bean>
</beans>

4.运行

核心组件

Spring IoC 容器相关类

DefaultListableBeanFactory:Spring 的核心 Bean 工厂,负责创建和管理 Bean 实例。

XmlBeanDefinitionReader:用于读取 XML 格式的 Bean 配置文件,并将配置信息加载到 Bean 工厂中。

ClassPathResource:指定 XML 配置文件的路径。

执行流程

创建DefaultListableBeanFactory实例(Bean 工厂)。

创建XmlBeanDefinitionReader并绑定到 Bean 工厂,用于读取 XML 配置。

通过读取器加载bean.xml配置,将userDao和userService的 Bean 定义注册到工厂中。

从工厂中获取 id 为userService的 Bean 实例。

打印userService实例(默认输出对象的类名和哈希码)。

相关推荐
小码哥_常5 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮8 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
学长毕设8 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
HideF8 小时前
Linux
linux·服务器·网络
她说可以呀9 小时前
Vue插槽
前端·javascript·vue.js
qq_448011169 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
zzu123zsw9 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
aixingpan9 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_9583529010 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
Ruiery10 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器