当前位置: 代码网 > it编程>编程语言>Java > Spring实例化Bean的三种方式详解

Spring实例化Bean的三种方式详解

2025年08月17日 Java 我要评论
在spring框架中,bean实例化是ioc容器的核心功能。本文将结合具体代码示例,详细讲解三种实例化方式及其实现方法。<!--spring.xml--><?xml version=

在spring框架中,bean实例化是ioc容器的核心功能。本文将结合具体代码示例,详细讲解三种实例化方式及其实现方法。

<!--spring.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">
 
    <bean id="bean1" class="com.qcby.bean.bean1"></bean> <!-- 普通方法-->
 
    <bean id="bean2" class="com.qcby.bean.myfactorybean2" factory-method="creatbean2"></bean><!--静态工厂-->
 
    <!--创建myfactorybean3的bean-->
    <bean id="myfactorybean3" class="com.qcby.bean.myfactorybean3"/>
    <bean id="bean3" factory-bean="myfactorybean3" factory-method="creatbean3"/>
 
</beans>

方式1:默认构造器实例化(最常用)

原理:spring直接调用类的无参构造器创建实例
适用场景:大多数常规bean的初始化

代码实现

// bean1.java
package com.qcby.bean;
public class bean1 {} // 只需无参构造器
<!-- spring.xml 配置 -->
<bean id="bean1" class="com.qcby.bean.bean1"/>
// instancebean1.java
package com.qcby;
public class instancebean1 {
    public static void main(string[] args) {
        applicationcontext context = new classpathxmlapplicationcontext("spring.xml");
        bean1 bean1 = context.getbean(bean1.class); // 直接通过类型获取
        system.out.println(bean1);
    }
}

特点

  • 配置最简单(只需class属性)
  • bean类不需要任何特殊方法
  • 通过getbean(class)可直接获取实例

方式2:静态工厂方法

原理:通过工厂类的静态方法创建实例
适用场景:封装对象创建逻辑

代码实现

// bean2.java
package com.qcby.bean;
public class bean2 {}
 
// myfactorybean2.java
package com.qcby.bean;
public class myfactorybean2 {
    public static bean2 creatbean2() {
        return new bean2(); // 静态工厂方法
    }
}
<!-- spring.xml 配置 -->
<bean id="bean2" class="com.qcby.bean.myfactorybean2" 
      factory-method="creatbean2"/>
// instancebean2.java
package com.qcby;
public class instancebean2 {
    public static void main(string[] args) {
        applicationcontext context = new classpathxmlapplicationcontext("spring.xml");
        bean2 bean2 = (bean2) context.getbean("bean2"); // 通过bean id获取
        system.out.println(bean2);
    }
}

特点

  • 工厂类不需要实例化
  • 使用factory-method指定静态方法
  • 适合整合第三方库或复杂初始化逻辑

方式3:实例工厂方法

原理:先创建工厂bean,再调用其实例方法

适用场景:工厂需要维护状态或多例bean创建

代码实现

// bean3.java
package com.qcby.bean;
public class bean3 {}
 
// myfactorybean3.java
package com.qcby.bean;
public class myfactorybean3 {
    public bean3 creatbean3() {
        return new bean3(); // 实例工厂方法
    }
}
<!-- spring.xml 配置 -->
<bean id="myfactorybean3" class="com.qcby.bean.myfactorybean3"/>
<bean id="bean3" factory-bean="myfactorybean3" 
      factory-method="creatbean3"/>
// instancebean3.java
package com.qcby;
public class instancebean3 {
    public static void main(string[] args) {
        applicationcontext context = new classpathxmlapplicationcontext("spring.xml");
        bean3 bean3 = (bean3) context.getbean("bean3");
        system.out.println(bean3);
    }
}

特点

  • 需要两个bean配置(工厂+目标)
  • 工厂bean本身可被注入依赖
  • 使用factory-beanfactory-method关联

三种方式对比表

特性默认构造器静态工厂方法实例工厂方法
配置复杂度⭐ (最简单)⭐⭐⭐⭐⭐ (最复杂)
创建逻辑直接调用构造器静态方法封装实例方法封装
工厂状态不支持无状态可维护状态
适用场景90%常规对象复杂初始化逻辑工厂需依赖其他bean
获取方式getbean(class)getbean("id")getbean("id")
src
├── main
│   ├── java
│   │   ├── com.qcby
│   │   │   ├── instancebean1.java
│   │   │   ├── instancebean2.java
│   │   │   └── instancebean3.java
│   │   └── com.qcby.bean
│   │       ├── bean1.java
│   │       ├── bean2.java
│   │       ├── bean3.java
│   │       ├── myfactorybean2.java
│   │       └── myfactorybean3.java
│   └── resources
│       └── spring.xml

最佳实践建议

1.优先选择默认构造器

<!-- 99%场景适用 -->
<bean id="service" class="com.example.service"/>

2.静态工厂适用场景

// 当需要复杂初始化时
public class connectionfactory {
    public static connection create() {
        // 复杂初始化代码
        return drivermanager.getconnection(...);
    }
}

3.实例工厂适用场景

// 当工厂需要依赖其他bean时
public class paymentfactory {
    @autowired
    private config config;
    
    public payment create() {
        return new payment(config);
    }
}

4.避免的常见错误

掌握这三种实例化方式,能够灵活应对不同场景的对象创建需求,是深入理解spring ioc容器的关键基础。

以上就是spring实例化bean的三种方式详解的详细内容,更多关于spring实例化bean的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com