Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Linux

  • 数据结构与算法

  • 算法设计与分析

  • Java

  • Python

  • 设计模式

  • 计算机网络

  • Spring笔记

    • Spring概述
    • IOC的概念作用
    • bean标签
    • 基于XML创建bean对象
      • 基于XML创建bean对象
        • 1. 调用构造函数创建Bean
        • 2. 调用静态工厂方法创建Bean
        • 3. 调用实例工厂方法创建Bean
    • 基于XML的依赖注入
    • 基于注解创建bean对象
    • 基于注解的依赖注入
    • 其他注解
    • AOP
  • SpringMVC笔记

  • SpringBoot笔记

  • SpringSecurity

  • Elasticsearch笔记

  • RabbitMQ笔记

  • Docker笔记

  • MySQL

  • Redis

  • Mybatis

  • MybatisPlus

  • Nginx

  • Kubernetes笔记

  • Git

  • Software

  • 微服务笔记

  • bug

  • BackEndNotes
  • Spring笔记
Geeks_Z
2023-01-15
目录

基于XML创建bean对象

基于XML创建bean对象

1. 调用构造函数创建Bean

调用构造方法创建Bean是最常用的一种情况,Spring容器通过new关键字调用构造器来创建Bean实例,通过class属性指定Bean实例的实现类,也就是说,如果使用构造器创建Bean方法,则<bean/>元素必须指定class属性,其实Spring容器也就是相当于通过实现类new了一个Bean实例。调用构造方法创建Bean实例,通过名字也可以看出,我们需要为该Bean类提供无参数的构造器。如果此类中没有默认构造函数,则对象无法创建。

  • 1.Bean实现类Person.java

    package ioc.pojo;
    public class Person{
        private String name;
        
        public String getName() {
            return name;
        }
        
        public void setName(String name) {
            this.name = name;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    因为是通过构造函数创建Bean,因此我们需要提供无参数构造函数,另外我们定义了一个name属性,并提供了setter方法,Spring容器通过该方法为name属性注入参数。

  • 2.配置文件applicationContext.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">
        <!-- 指定class属性,通过构造方法创建Bean实例 -->  
        <bean id="person" class="cn.edu.wtu.Person">  
          <!-- 通过构造方法赋值 -->  
         <constructor-arg name="name" value="魔术师"></constructor-arg>  
        </bean>  
    </beans>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    配置文件中,通过<bean>元素的id属性指定该bean的唯一名称,class属性指定该bean的实现类,可以理解成Spring容器就是通过该实现类new了一个Bean。通过<constructor-arg>标签的name属性和value属性指定了:构造方法赋值。

2. 调用静态工厂方法创建Bean

把创建Bean的任务交给了静态工厂,而不是构造函数,这个静态工厂就是一个Java类,那么使用静态工厂创建Bean咱们又需要添加哪些属性呢?我们同样需要在<bean/>元素内添加class属性,上面也说了,静态工厂是一个Java类,那么该class属性指定的就是该工厂的实现类,而不再是Bean的实现类,告诉Spring这个Bean应该由哪个静态工厂创建,另外我们还需要添加factory-method属性来指定由工厂的哪个方法来创建Bean实例,因此使用静态工厂方法创建Bean实例需要为<bean/>元素指定如下属性:

  • class:指定静态工厂的实现类,告诉Spring该Bean实例应该由哪个静态工厂创建(指定工厂地址)

  • factory-method:指定由静态工厂的哪个方法创建该Bean实例(指定由工厂的哪个车间创建Bean)

如果静态工厂方法需要参数,则使用<constructor-arg/>元素传入

public class StaticFactory {
     public  static IAccountService getAccountService() {
                return new AccountServiceImpl();
     }
 }
1
2
3
4
5

配置方式如下:

<bean id = "accountService" class = "cn.edu.wtu.factory.StaticFactory" factory-method="getAccountService"></bean>        
1

3. 调用实例工厂方法创建Bean

使用某个类中的静态方法创建对象,并存入spring容器,如下

/**
 *模拟一个工厂类,该类可能存在于jar包中,无法通过修改源码的方式来提供默认构造函数
 * 
 */
public class InstanceFactory {
    public IAccountService getAccountService() {
        return new AccountServiceImpl();
    }
}
1
2
3
4
5
6
7
8
9

配置方式如下:

<bean id = "instanceFactory" class = "cn.edu.wtu.factory.InstanceFactory"></bean>
<bean id = "accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
1
2

先把工厂的创建交给 spring 来管理。然后在使用工厂的 bean 来调用里面的方法

  • factory-bean 属性:用于指定实例工厂 bean 的 id。
  • factory-method 属性:用于指定实例工厂中创建对象的方法。
上次更新: 2024/03/29, 08:56:31
bean标签
基于XML的依赖注入

← bean标签 基于XML的依赖注入→

最近更新
01
并行训练
03-29
02
tensor维度转换
03-26
03
ResNet源码解读
03-23
更多文章>
Theme by Vdoing | Copyright © 2022-2024 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式