探索 Java Spring IOC 中基于 XML 的工厂 Bean

0.简介spring和IoC(控制反转)

Java Spring 是一种广泛用于构建应用程序的 Java 框架。它提供了一个全面的编程和配置模型来简化 Java 开发并促进良好的编程实践。该框架包括控制反转 (IOC)、面向方面编程 (AOP) 以及对一系列数据库和技术的支持等功能。Spring 帮助开发人员构建高度模块化和可测试的应用程序,这些应用程序可以轻松维护和扩展。此外,它还提供了广泛的工具和插件来简化常见任务并改进开发过程。

Spring IoC(控制反转)是 Spring 框架的核心部分,它提供了一种管理构成应用程序的对象的方法。它提供了一种创建和管理对象的机制,它负责实例化、配置和组装这些对象。Spring IoC 的目标是解耦对象之间的依赖关系,以便它们可以轻松换出或更新,而不会影响应用程序的其余部分。这是通过定义一组用于创建和连接对象的规则来实现的,这些规则存储在配置文件中或直接在对象上注释。

1.开始

第一种 普通 Bean 就是我们在配置文件中 定义的类对象 创建bean 并定义相关的id和声明类对象
普通bean的特点在于 在配置文件中定义的类型 也就是返回类型
就比如 你定义的是一个 book类的类型 那你这个bean返回的 也比如是个book类型的对象

第二种 是在工厂类中统一管理的工厂Bean
特点上 还是有比较大区别的 首先 工厂Bean 又叫FactoryBean 他定义的类型和返回类型是可以不一样的
通常作为一个工厂类 来管理bean对象操作

我们创建一个java项目 引入spring中的基本依赖
然后在src下创建两个包 我这里直接叫 spring5 和 collectiontype 你们可以根据自己的喜好起名 跟我的一样 可以避免一些名字问题 毕竟你们的代码大部分可以直接从我这复制

然后 我们在 collectiontype包下创建一个 Course 类 参考代码如下

package collectiontype;

//课程类
public class Course {
    //课程名称
    private String cname;
    public void setCname(String cname) {
        this.cname = cname;
    }
    public String toString() {
        return "cname = "+cname;
    }
}

这是一个管理课程的类 定义 字符串的cname 代表课程名称 然后 定义了他的set方法
改写了类的toString方法 这样直接输出对象 就会输出cname的值

在 spring5目录下创建一个java类 我这里取名为MyBean

package spring5;

import collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;

public class MyBean implements FactoryBean<Course> {
    @Override
    public Course getObject() throws Exception {
        Course course = new Course();
        course.setCname("测试工具");
        return course;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }
}

这里 我们实现了 FactoryBean接口 这样就表示他是一个工厂类
然后 定义泛型 指定Course对象类型 这个就代表 我们返回的是一个 Course类的对象

getObject返回的值 就是最后 bean对象返回的值

然后我们在src下创建 bean.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="mybean" class="spring5.MyBean"></bean>
</beans>

这里 我们就创建了一个bean MyBean对象

然后 在src下创建一个text测试类 参考代码如下


import collectiontype.Course;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class text {
    public static void main(String args[]) {
        //获取配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        Course course = context.getBean("mybean", Course.class);
        System.out.println(course);
    }
}

可以看到 我们创建的是mybean的对象反射对象 但我们接收的类型是Course类的 因为我们MyBean实际返回的是一个Course类的对象

然后通过System.out.println输出了对象的toString方法

运行结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快撑死的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值