Spring容器实例化Bean的三种方式

1、构造方法

默认

@Data
@Slf4j
@Component(value = "computer")
public class Computer {
    
    
    @Resource
    private IntelCpu intelCpu;

    public Computer() {
    
    
        log.info("Computer构造方法");
    }

    public void play() {
    
    
        intelCpu.run();
        log.info("Computer正在运行");
    }
}
@Test
public void test() {
    
    
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
    Computer computer = (Computer) applicationContext.getBean("computer");
    computer.play();
}

image-20210304162713330

2、静态工厂方法

@Data
@Slf4j
@Component(value = "computer")
public class Computer {
    
    
    @Resource
    private IntelCpu intelCpu;

    private static Computer computer = new Computer();
	
    //此方法必须是静态的
    public static Computer getInstance() {
    
    
        log.info("静态工厂方法执行");
        return computer;
    }

    public Computer() {
    
    
        log.info("Computer构造方法");
    }

    public void play() {
    
    
        intelCpu.run();
        log.info("Computer正在运行");
    }
}
<bean id="intelCpu" class="com.phz.entity.IntelCpu"/>
<bean id="computer" class="com.phz.entity.Computer" factory-method="getInstance">
    <property name="intelCpu" ref="intelCpu"/>
</bean>

image-20210304163912478

3、实例工厂方法

public class EntityLocator {
    
    
    private static Computer computer = new Computer();

    public EntityLocator() {
    
    
    }

    public Computer createComputer() {
    
    
        log.info("实力工厂方法执行");
        return computer;
    }
}
<bean id="entityLocator" class="com.phz.entity.EntityLocator"/>
<bean id="intelCpu" class="com.phz.entity.IntelCpu"/>
<bean id="computer" factory-bean="entityLocator" factory-method="createComputer">
    <property name="intelCpu" ref="intelCpu"/>
</bean>

image-20210304164514508

猜你喜欢

转载自blog.csdn.net/qq_43509535/article/details/114372272