Spring学习02 (IOC控制反转)

本文详细介绍了Spring框架中的IOC(控制反转)概念及其实现原理。通过三种不同的实例化方式(无参构造器、静态工厂和实例工厂)展示了如何利用Spring容器管理对象的创建过程。

IOC(控制反转)

控制反转(IOC):以前传统的java开发模式中,当需要一个对象时我们,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象,而在Spring开发模式中,Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为我们提供的对象即可,这就是控制反转的思想。实例化一个java对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法,当使用spring时我们就不需要关心通过何种方式实例化一个对象,spring通过控制反转机制自动为我们实例化一个对象。
简单的说,控制反转就是将对象的创建由之前的new创建,交给Spring进行管理。

Bean实例化的3中方式:

项目结构如下:

 1、使用类构造器(无参构造器)(常用,重点掌握)
在applicationContext.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">

    <!-- id为唯一标识 class标识要实例化的对象 -->
    <bean id="beanOne" class="com.gxj.two.BeanOne" ></bean>

</beans>
实例化对象:
package com.gxj.two;

public class BeanOne {
    public void add(){
        System.out.println("岁月如歌!");
    }

}
测试:
package com.gxj.two;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanOneTest {
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("com/gxj/two/applicationContext.xml");
        BeanOne beanOne = (BeanOne) context.getBean("beanOne");
        beanOne.add();
    }
}

输出结果:这里写图片描述

2、使用静态工厂创建(了解)
在applicationContext.xml配置文件中配置:
<bean id="beanTwo" class="com.gxj.two.BeanTwoFactory"  factory-method="getBeanTwo"></bean>
静态工厂类:
package com.gxj.two;

public class BeanTwoFactory {
    public static BeanTwo getBeanTwo() {
        System.out.println("岁月如歌!");
        return new BeanTwo();
    }
}
实例化对象:
package com.gxj.two;

public class BeanTwo {

    public void add() {
        System.out.println("时光静好!");
    }

}
测试:
package com.gxj.two;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanTwoTest {
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("com/gxj/two/applicationContext.xml");
        BeanTwo beanTwo = (BeanTwo) context.getBean("beanTwo");
        beanTwo.add();
    }
}
注意:使用静态工厂创建对象时,在工厂中静态方法的static不能省略。配置文件中的factory-method的属性值跟静态方法的方法名一致。
3、使用实例工厂进行创建(了解):

将对象的创建交给工厂类,跟静态工厂创建是类似的,但是配置不同
    在applicationContext.xml配置文件中配置:
    <!-- 利用实例工厂创建对象  要先创建工厂对象  注:工厂的id和factory-bean的值一致。-->
     <bean id="BeanFactory" class="com.gxj.two.BeanThreeFactory"></bean>
     <bean id="beanThree" factory-bean="BeanFactory" factory-method="getBeanThree"></bean>
实例工厂类:
package com.gxj.two;

public class BeanThreeFactory {
    public BeanThree getBeanThree() {
        System.out.println("明日待明日,明日何其多。");
        return new BeanThree();
    }

}
实例对象:
package com.gxj.two;

public class BeanThree {
    public void add() {
        System.out.println("我生待明日,万事成蹉跎!");
    }

}
测试:
package com.gxj.two;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanThreeTest {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("com/gxj/two/applicationContext.xml");
        BeanThree beanThree = (BeanThree) context.getBean("beanThree");
        beanThree.add();
    }

}

结果:这里写图片描述

bean标签的常用属性:

    id:起名称,id属性值名称任意命名,但是不能包含特殊符号,且必须唯一
    class:要实例的对象所在类的全路径
    name:用的少,功能和id一样,name属性可以包含特殊符号。
    scope:bean的作用范围 ,设置单例或者多例。
        singleton:单例(只能创建一个对象,默认),多次创建使用同一个地址,也就是说创建的是同一个对象。
        prototype:多例,多次创建,创建的是多个对象。
数据集介绍:垃圾分类检测数据集 一、基础信息 数据集名称:垃圾分类检测数据集 图片数量: 训练集:2,817张图片 验证集:621张图片 测试集:317张图片 总计:3,755张图片 分类类别: - 金属:常见的金属垃圾材料。 - 纸板:纸板类垃圾,如包装盒等。 - 塑料:塑料类垃圾,如瓶子、容器等。 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。 数据格式:图片来源于实际场景,格式为常见图像格式(如JPEG/PNG)。 二、适用场景 智能垃圾回收系统开发: 数据集支持目标检测任务,帮助构建能够自动识别和分类垃圾材料的AI模型,用于自动化废物分类和回收系统。 环境监测与废物管理: 集成至监控系统或机器人中,实时检测垃圾并分类,提升废物处理效率和环保水平。 学术研究与教育: 支持计算机视觉与环保领域的交叉研究,用于教学、实验和论文发表。 三、数据集优势 类别覆盖全面: 包含三种常见垃圾材料类别,覆盖日常生活中主要的可回收物类型,具有实际应用价值。 标注精准可靠: 采用YOLO标注格式,边界框定位精确,类别标签准确,便于模型直接训练和使用。 数据量适中合理: 训练集、验证集和测试集分布均衡,提供足够样本用于模型学习和评估。 任务适配性强: 标注兼容主流深度学习框架(如YOLO等),可直接用于目标检测任务,支持垃圾检测相关应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值