spring bean实例化方式

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();
    }
}
时间: 2024-11-07 03:58:53

spring bean实例化方式的相关文章

Spring Bean 注册方式小结

IOC容器 Spring的核心是一个IOC容器,管理着我们向容器注册的所有bean.下面我们来看下两种向容器注册bean的方式, 通过BeanDefinitionReader读取Spring Bean的配置文件,解析然后注册: 通过ClassPathBeanDefinitionScanner直接扫描带有Spring Bean注解的Java类并注册: Reader BeanDefinitionReader的使用方式如下, import org.springframework.beans.facto

Spring bean注入方式

Spring bean提供了3中注入方式:属性注入,构造方法注入和 1.属性注入: 1 <bean id="dept" class="com.proc.bean.Dept"> 2 <property name="id" value="2"/> 3 <property name="name" value="信息部"></property> 4

Java+Spring+Bean+注入方式

1.首先准备共享文件调用方法Client端Client.java: import org.springframework.context.support.ClassPathXmlApplicationContext; public class Client { public static void main(String[] args) { //创建容器 ClassPathXmlApplicationContext cac = new ClassPathXmlApplicationContext

spring三种实例化bean的方式

1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public void save(); } PersonServiceBean: package service.impl; import service.PersonService; public class PersonServiceBean implements PersonService { public

Spring 实例化bean的方式

实例化bean的方式有三种: 1.用构造器来实例化 2.使用静态工厂方法实例化 3.使用实例工厂方法实例化 当采用构造器来创建bean实例时,Spring对class并没有特殊的要求, 我们通常使用的class都适用 基于XML的元数据配置文件,可以这样来指定bean类: 当采用静态工厂方法创建bean时,除了需要指定class 属性外,还需要通过factory-method属性来指定创建bean实例 的工厂方法.Spring将调用此方法(其可选参数接下来介绍)返回实例对象,就此而言, 跟通过普

spring学习(02)之bean实例化的三种方式

bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构造器实例化: 这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现. 比如 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h

Spring bean管理器 bean实例化的三种方式

bean实例化的三种方式实现 第一种:使用类的无参数构造方法创建(常用 重要) 第一种实例化方式最常用,实例化类时会通过调用无参构造方法创建.示例代码如下: package spring.com.UserService; public class UserService { public UserService() { //该方法是无参方法 } public void AddUser(){ System.out.println("Add........................."

【Spring源码分析】非懒加载的Bean实例化过程(下篇)

doCreateBean方法 上文[Spring源码分析]非懒加载的Bean实例化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码: 1 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[]

Spring bean三种创建方式

spring共提供了三种实例化bean的方式:构造器实例化  静态工厂实例化   动态工厂实例化,下面一一详解: 1.构造器实例化 City.java 1 package com.proc.bean; 2 3 public class City { 4 5 private String name; 6 private String code; 7 8 public City() { 9 } 10 11 public City(String name, String code) { 12 this