spring bean实例化方式

注意:xml配置中bean节点下scope属性默认值为singleton(单例),在需要多例的情况下需要配置成prototype

spring提供三种实例化方式:默认构造、静态工厂、实例工厂

一、默认(无参)构造:就是经常使用的方式,xml-><bean id="" class=""></bean>

二、静态工厂:工厂工具类,提供的方法都是static静态的

1、沿用上一个工程,基本结构如下:

2、新建CategoryService类

package hjp.spring.staticinstance;

public class CategoryService {
    public void addCategory() {
        System.out.println("add category");
    }
}

3、新建工厂类MyFactory

package hjp.spring.staticinstance;

public class MyFactory {
    public static CategoryService createService() {
        return new CategoryService();
    }
}

4、新建beans.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">
    <!-- 将工厂交予spring,自定义工厂创建对象由spring管理 
    class 指定工厂实现类
    factory-method 确定静态方法
    -->
    <bean id="categoryServiceId" class="hjp.spring.staticinstance.MyFactory" factory-method="createService"></bean>
</beans>

5、新建测试类

package hjp.spring.staticinstance;

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

public class TestApp {
    @Test
    public void demo1() {
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("hjp/spring/staticinstance/beans.xml");
        CategoryService categoryService=applicationContext.getBean("categoryServiceId",CategoryService.class);
        categoryService.addCategory();
    }
}

三、实例工厂:

1、沿用上一个工程,基本结构如下:

2、新建OrderService类

package hjp.spring.commeninstance;

public class OrderService {
    public void addOrder() {
        System.out.println("add Order");
    }
}

3、新建工厂类MyFactory

package hjp.spring.commeninstance;

public class MyFactory {
    public OrderService createService() {
        return new OrderService();
    }
}

4、新建beans.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、创建工厂 -->
    <bean id="myFactoryId" class="hjp.spring.commeninstance.MyFactory"></bean>
    <!-- 2、实例工厂创建对象,交予spring管理 
           factory-bean 确定实例工厂
           factory-method 确定方法
    -->
    <bean id="orderServiceId" factory-bean="myFactoryId" factory-method="createService"></bean>
</beans>

5、新建测试类

package hjp.spring.commeninstance;

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

public class TestApp {
    @Test
    public void demo1() {
        //获得容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("hjp/spring/commeninstance/beans.xml");
        //获得对象
        OrderService orderService = applicationContext.getBean("orderServiceId", OrderService.class);
        orderService.addOrder();
    }
}
原文地址:https://www.cnblogs.com/hujiapeng/p/4773818.html