0
点赞
收藏
分享

微信扫一扫

Mybatis-Plus(企业实际开发应用)

数数扁桃 2023-10-28 阅读 61

一、概述

        所谓实例化bean,其实就是指Spring如何把这一个个的普通的Java对象创建为bean的。

二、方式

2.1、通过构造器方式

        当我们在applicationContext.xml中配置了<bean id="" class=""></bean>或者通过JavaConfig的方式在一个类上标注了@Component注解,Spring底层就会通过反射的方式调用构造方法去实例化bean。

2.2、通过静态工厂方式

<!--
	通过静态工厂方式实例化bean
	注意事项:factory-method指定的方法需为静态方法
-->
<bean id="user3" class="org.star.entity.User3" scope="prototype" factory-method="createUser3"></bean>
public static User3 createUser3() {
	User3 user3 = new User3(3,"王五");
	return user3;
}

2.3、通过实例工厂方式

<!--
	通过实例工厂的方式实例化bean
	说明:@Bean的底层就是通过 factory-bean + factory-method 实现的
-->
<bean id="userFactory" class="org.star.entity.UserFactory"></bean>
<bean id="user4" class="org.star.entity.User" factory-bean="userFactory" factory-method="createUser"></bean>
public class UserFactory {

    public User createUser() {
        User user = new User(4,"赵四");
        return user;
    }

}

2.4、通过实现FactoryBean的方式

@Component
@ToString(callSuper = true)
@Data
public class Tank extends Car {
    /**
     * 产地
     */
    private String producer;

    public Tank() {
        System.out.println("Tank的无参构造执行了...");
    }

    public Tank(String name, String description, String producer) {
        super(name, description);
        this.producer = producer;
        System.out.println("Tank的有参构造执行了...");
    }
}
@Component
@Data
public class Car implements Serializable, FactoryBean<Car> {
    private String name;
    private String description;

    public Car() {
        System.out.println("Car的无参构造执行了...");
    }
    public Car(String name, String description) {
        this.name = name;
        this.description = description;
        System.out.println("Car的有参构造执行了...");
    }

    @Override
    public Car getObject() throws Exception {
        Tank tank = new Tank("东风0001","加满油能跑1000公里","中国");
        return tank;
    }

    @Override
    public Class<?> getObjectType() {
        return Tank.class;
    }
}
/**
 * Spring实例化bean方式四:通过FactoryBean的方式实例化bean
 * @param args
 */
public static void main(String[] args) {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MySpringConfig.class);
    Tank tank = context.getBean("car", Tank.class);
    System.out.println("tank = " + tank);
}

三、区别

        构造器方式由Spring通过工厂模式+反射机制完成bean的实例化,后三种方式由程序员自己手动完成bean的实例化,相对而言更灵活。

举报

相关推荐

0 条评论