Spring之IoC的简单运用(工厂实现、Spring实现)

Spring框架的核心之一是IoC(Inversion of Control,控制反转)容器,它负责管理对象的生命周期和依赖关系。下面我会分别通过简单的工厂模式实现和Spring的IoC容器实现来展示IoC的简单运用。

工厂模式实现

在工厂模式中,我们通常会创建一个工厂类来负责创建和管理对象。但是,这还不是真正的IoC,因为它没有将对象的控制权从代码中转移到外部配置中。但是,这可以作为理解IoC的一个起点。

java 复制代码
// 简单的服务接口
public interface MyService {
    void doSomething();
}

// 实现类
public class MyServiceImpl implements MyService {
    @Override
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

// 工厂类
public class MyServiceFactory {
    public static MyService createService() {
        return new MyServiceImpl();
    }
}

// 使用工厂类创建对象
public class Client {
    public static void main(String[] args) {
        MyService service = MyServiceFactory.createService();
        service.doSomething();
    }
}

Spring IoC容器实现

在Spring中,我们不再需要手动编写工厂类来创建对象。相反,我们配置Spring容器来自动创建和管理对象。

  1. 配置XML文件(也可以使用注解配置)

applicationContext.xml:

xml 复制代码
<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="myService" class="com.example.MyServiceImpl" />

</beans>
  1. 在Java代码中获取Spring容器中的对象
java 复制代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringClient {
    public static void main(String[] args) {
        // 获取Spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        
        // 从容器中获取bean
        MyService service = (MyService) context.getBean("myService");
        
        // 使用bean
        service.doSomething();
        
        // 关闭容器(可选,如果是基于ClassPath的容器,在JVM退出时会自动关闭)
        ((ClassPathXmlApplicationContext) context).close();
    }
}

在这个例子中,我们不再需要MyServiceFactory来创建MyService对象。相反,我们通过Spring容器来管理对象的创建和依赖关系。这就是IoC的核心思想:将对象的创建和依赖关系的控制从代码中转移到外部配置中,从而实现代码的解耦和可维护性的提高。

注意:在实际应用中,通常会使用更复杂的配置,包括属性注入、构造函数注入、自动装配等,来管理对象的依赖关系。此外,Spring还支持多种不同的容器实现,包括基于XML的配置、基于Java的配置、基于注解的配置等。

相关推荐
2301_780789667 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设8 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒8 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
步行cgn9 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川9 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵9 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David9 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1009 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin10 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质10 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring