实例工厂:必须现有工厂的实例对象,通过实例对象创建对象。所有的方法都是非静态的(这一点和静态工厂有区别)

(直接看代码)

  工厂(和静态工厂的区别就是非静态 其他都一样)

复制代码
package c_inject.c_factory;
/*
 * 实例工厂
 */
public class MyBeanFactory {
 public  UserService createService(){
    return new UserserviceImpl();
 } 
}
复制代码

  配置(配置和静态的有点区别  仔细看看吧 )

复制代码
<?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="MyBeanFactoryId" class="c_inject.c_factory.MyBeanFactory">
      <!-- 获取userService 
      factory-bean :确定工厂实例
      factory-method : 确定工厂中的方法
      -->
      <bean id="userServiceId" factory-bean="MyBeanFactoryId" factory-method="createService"></bean>
</beans>
复制代码

   测试类 (静态自定义和实例自定义的区别大一点  当用spring的时候完全一样)

复制代码
package c_inject.c_factory;

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

import a.ioc.Uservice;

public class TestStaticFactory {

    @Test
    /*
     * 自定义实例工厂
     */
    public void demo01(){
        //自定义实例工厂
        //1.创建工厂
        MyBeanFactory factory=new MyBeanFactory();
        //通过工厂获取对象
        UserService uservice= factory.createService();
        uservice.addUser();
        };
        
    @Test    
    /*
     * spring 的工厂
     */
    public void demo02(){
        ApplicationContext application =new ClassPathXmlApplicationContext("c_inject/c_factory/beans.xml");
        UserService userService = (UserService) application.getBean("userServiceId");
        userService.addUser();

        
        
        
        
    };
        
        
             
    }
    
复制代码

 

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示