Spring 的 Ioc配置

HappyComponent.java

package com.atguigu.Ioc_01;

public class HappyComponent {
    // 默认包含无参的构造方法

    public void dowork(){
        System.out.println("HappyComponent.dowork");
    }
}

ClientService.java

package com.atguigu.Ioc_01;

静态工厂类
public class ClientService {
    private static ClientService clientService = new ClientService();

    private ClientService() {
    }

    public static ClientService clientService() {
        return clientService;
    }
}

ClientServiceImpl.java

package com.atguigu.Ioc_01;

public class ClientServiceImpl {
}

DefaultServiceLocator.java

package com.atguigu.Ioc_01;

非静态工厂类
public class DefaultServiceLocator {
    public static ClientServiceImpl clientService = new ClientServiceImpl();

    public ClientServiceImpl createClientServiceInstance() {
        return clientService;
    }
}

resources目录下的 .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">

    1、可以使用无参构造函数实例化的组件,如何进行Ioc配置呢?
            <bean - 一个组件信息(一个组件对象)
                    id:组件的标识,唯一
                    class:组件的类的权限定符

            配置了两个组件happyComponent1 和 happyComponent2,
            它们的类型都是com.atguigu.Ioc_01.HappyComponent,
            Spring容器会使用无参构造函数来创建这两个组件的实例,并将它们存储在IoC容器中,
            因为,默认是单例模式(singleton),即使声明了两次,
            Spring容器也只会创建一个HappyComponent的实例,
            但会为这两个bean引用提供相同的实例。

            当你从容器中获取这两个bean的引用时:
                HappyComponent happyComponent1 = context.getBean("happyComponent1", HappyComponent.class);
                HappyComponent happyComponent2 = context.getBean("happyComponent2", HappyComponent.class);
                happyComponent1、happyComponent2这两个引用实际上是指向同一个HappyComponent对象的,即它们的地址(内存中的引用)是相同的,
                这就是单例作用域的含义。
    <bean id="happyComponent1" class="com.atguigu.Ioc_01.HappyComponent" />
    
    <bean id="happyComponent2" class="com.atguigu.Ioc_01.HappyComponent" />


    2、静态工厂类,如何声明工厂方法进行Ioc配置?
         id = "组件的标识"
         class ="工厂类的权限定符"
         factory-method = "静态工厂方法"
         下面这个bean,意思是:
             调用“com.atguigu.Ioc_01.ClientService”这个工厂类的“clientService”方法,
             将它造出的组件对象,存储到Ioc容器,叫clientService(id等于的那个值)

		 配置了一个名为clientService的组件,它并不直接通过类的构造函数来实例化,
		    而是,通过调用com.atguigu.Ioc_01.ClientService类的静态方法clientService来创建实例,
		    factory-method属性用于指定用于创建组件实例的静态工厂方法。
    <bean id="clientService" class="com.atguigu.Ioc_01.ClientService" factory-method="clientService" />


   3、非静态工厂,如何声明Ioc配置?
        配置了一个非静态工厂defaultServiceLocator,它本身也是一个bean,由Spring容器管理,
        然后,通过factory-bean属性指定了非静态工厂bean的id,
        并且,通过factory-method属性指定了用于创建组件实例的非静态工厂方法createClientServiceInstance,
        所以,Spring容器会首先创建defaultServiceLocator的实例,然后调用其createClientServiceInstance方法来创建clientService2组件的实例
    
    步骤1、配置工厂类的组件信息
    <bean id="defaultServiceLocator" class="com.atguigu.Ioc_01.DefaultServiceLocator" />
    步骤2、通过指定非静态工厂对象和方法名,来配置生成Ioc信息
            也就是:根据工厂对象的实例工厂方法,进行实例化组件对象。
    <bean id="clientService2" factory-bean="defaultServiceLocator" factory-method="createClientServiceInstance" />

</beans>

相关推荐

  1. Spring Ioc配置

    2024-04-01 22:20:17       13 阅读
  2. Spring基于注解IOC配置

    2024-04-01 22:20:17       33 阅读
  3. spring基于注解IOC配置

    2024-04-01 22:20:17       37 阅读
  4. SpringBean标签配置IOC和依赖注入详解

    2024-04-01 22:20:17       14 阅读
  5. Spring-ioc-纯xml配置

    2024-04-01 22:20:17       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 22:20:17       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 22:20:17       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 22:20:17       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 22:20:17       20 阅读

热门阅读

  1. Python:文件读写

    2024-04-01 22:20:17       15 阅读
  2. NodeJs(前端面试题整合)

    2024-04-01 22:20:17       15 阅读
  3. 潍坊如何申请专利

    2024-04-01 22:20:17       14 阅读
  4. RTOS--异常向量和中断向量

    2024-04-01 22:20:17       15 阅读
  5. c++计算浮点数相除的余

    2024-04-01 22:20:17       16 阅读
  6. C++20中的jthread

    2024-04-01 22:20:17       11 阅读
  7. 密码攻击

    2024-04-01 22:20:17       11 阅读
  8. SpringBoot单元测试

    2024-04-01 22:20:17       16 阅读
  9. 日常有疑惑的点总结

    2024-04-01 22:20:17       13 阅读