java 实例化 bean_Spring实例化Bean三种方法:构造器、静态工厂、实例工厂

本文介绍了Spring中Bean的三种实例化方式:构造器实例化、静态工厂实例化和实例工厂实例化。通过XML配置文件,详细展示了每种方式的实现过程,并提供了相应的代码示例。
摘要由CSDN通过智能技术生成

Spring中Bean相当于java中的类,可以通过xml文件对bean进行配置和管理。

一、Bean的实例化:

构造器实例化、静态工厂实例化、实例工厂方式实例化。

目录:

8d4c34103ad7ecf35b1b319d823aed40.png

构造器实例化:

xml配置文件:

85906bc7620643d26cbf6f33716cc001.png

id唯一,calss指定Bean具体实现类,必须是完整的类名,可以在Bean1.java文件中右击“public class Bean1”中的Bean1,选中Copy Qualifiel Name得到。注意这里用"."分隔。

测试函数:

807e475acd9aef2062d5568ec80ae14f.png

测试函数中首先定义xml配置文件的路径,可以在目录视图中右键选中Copy Qualifiel Name得到,注意这里从com开始,因为是路径所以用/隔开。

然后加载配置文件对Bean进行实例化,在通过getBean函数获得指定id的实例对象,注意类型转换。

完整代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.liu.instance.contructor;public classBean1 {

}

Bean1.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

beans1.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.liu.instance.contructor;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;public classInstanceTest {public static voidmain(String[] args) {//定义配置文件路径

String xmlPath = "com/liu/instance/contructor/beans1.xml";//ApplicationContext 加载配置文件时对Bean进行实例化。

ApplicationContext applicationContext = newClassPathXmlApplicationContext(xmlPath);//配置文件的id确定是哪个bean,在通过class找到java文件创建对象。

Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");

System.out.println(bean1);

}

}

InstanceTest.java

运行截图:

6f5ff0f86e0a9247aa682ee9ff1d2b90.png

静态工厂实例化:

xml配置文件:

1d96870ffef50938abe602efcf07a130.png

id唯一,class为工厂方法类,factory-method值为方法名,确定使用了工厂中的哪个方法。

静态工厂类:

ba4e10f29dbb09e5efda4666a6b7b99a.png

静态方法返回一个Bean2对象。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.liu.instance.static_factory;/** lsq

* 2019-9-10

* Spring静态工厂实例化被实例化的类Bean2*/

public classBean2 {

}

Bean2.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.liu.instance.static_factory;/** lsq

* 2019-9-10

* Spring静态工厂实例化*/

public classMyBean2Factory {//创建Bean2对象

public staticBean2 createBean2(){return newBean2();

}

}

MyBean2Factory.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.liu.instance.static_factory;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;/** lsq

* 2019-9-10

* Spring静态工厂实例化对象测试类*/

public classInstanceTest {public static voidmain(String[] agrs){//定义配置文件路径

String xmlPath = "com/liu/instance/static_factory/beans2.xml";//实例化对象

ApplicationContext ApplicationContext = newClassPathXmlApplicationContext(xmlPath);//调用函数//getBean函数传入id属性值获取对象

System.out.println(ApplicationContext.getBean("bean2"));

}

}

InstanceTest.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

beans2.xml

运行截图:

39a0f49bc8d8135bc7771e54051009a8.png

实例工厂实例化:

xml配置文件:

bb32bfd458bbef2e9812e55aaa80740b.png

两个bean第一个为静态工厂,class为静态工厂类。第二个为bean3,factory-method属性配置实例工厂,factory-method确定使用工厂中哪个方法。

工厂类:

098ed18e8dc5a4d5fffb5e2f0f3cdfea.png

返回一个Bean3对象。

完整代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.liu.instance.factory;/** lsq

* 2019-9-10

* Spring工厂实例化对象*/

public classBean3 {

}

Bean3.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

bean3.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.liu.instance.factory;/** lsq

* 2019-9-10

* Spring工厂实例化对象*/

public classMyBean3Factory {publicMyBean3Factory(){

System.out.println("Bean3工厂实例化中。。。");

}publicBean3 createBean3(){return newBean3();

}

}

MyBean3Factory.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.liu.instance.factory;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;/** lsq

* 2019-9-10

* Spring工厂实例化测试类*/

public classInstanceTest3 {public static voidmain(String[]args){//指定配置文件路径

String xmlPath= "com/liu/instance/factory/bean3.xml";//ApplicationContext加载配置文件时,对Bean进行实例化

ApplicationContext applicationContext = newClassPathXmlApplicationContext(xmlPath);

System.out.println(applicationContext.getBean("bean3"));

}

}

InstanceTest3.java

运行截图:

1e77a39906454c970c4905088f35a097.png

三种方法区别:

36a00945cf54b23d3e53ac5bf2edda1b.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值