• 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();
        }
    }
  • 相关阅读:
    反射
    java 验证码识别
    Spring boot + mybatis + orcale
    JVM内存模型及垃圾回收的研究总结
    Java的Array和ArrayList
    Java中最常见的十道面试题
    session和cookie
    Hibernate的load()和get()区别
    ajax跨域获取网站json数据
    对于Spring的IOc和DI的理解
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/4773818.html
Copyright © 2020-2023  润新知