Spring实例化Bean三种方法:构造器、静态工厂、实例工厂
Spring中Bean相当于java中的类,可以通过xml文件对bean进行配置和管理。
一、Bean的实例化:
构造器实例化、静态工厂实例化、实例工厂方式实例化。
目录:
构造器实例化:
xml配置文件:
id唯一,calss指定Bean具体实现类,必须是完整的类名,可以在Bean1.java文件中右击“public class Bean1”中的Bean1,选中Copy Qualifiel Name得到。注意这里用"."分隔。
测试函数:
测试函数中首先定义xml配置文件的路径,可以在目录视图中右键选中Copy Qualifiel Name得到,注意这里从com开始,因为是路径所以用/隔开。
然后加载配置文件对Bean进行实例化,在通过getBean函数获得指定id的实例对象,注意类型转换。
完整代码:
package com.liu.instance.contructor; public class Bean1 { }
Bean1.java
<?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-4.3.xsd">
<bean id="bean1" class="com.liu.instance.contructor.Bean1"></bean>
</beans>
beans1.xml
package com.liu.instance.contructor; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class InstanceTest { public static void main(String[] args) {
//定义配置文件路径
String xmlPath = "com/liu/instance/contructor/beans1.xml";
//ApplicationContext 加载配置文件时对Bean进行实例化。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//配置文件的id确定是哪个bean,在通过class找到java文件创建对象。
Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
System.out.println(bean1); }
}
InstanceTest.java
运行截图:
静态工厂实例化:
xml配置文件:
id唯一,class为工厂方法类,factory-method值为方法名,确定使用了工厂中的哪个方法。
静态工厂类:
静态方法返回一个Bean2对象。
package com.liu.instance.static_factory;
/*
* lsq
* 2019-9-10
* Spring静态工厂实例化被实例化的类Bean2
*/
public class Bean2 { }
Bean2.java
package com.liu.instance.static_factory;
/*
* lsq
* 2019-9-10
* Spring静态工厂实例化
*/ public class MyBean2Factory { //创建Bean2对象
public static Bean2 createBean2(){
return new Bean2();
}
}
MyBean2Factory.java
package com.liu.instance.static_factory; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /*
* lsq
* 2019-9-10
* Spring静态工厂实例化对象测试类
*/
public class InstanceTest { public static void main(String[] agrs){
//定义配置文件路径
String xmlPath = "com/liu/instance/static_factory/beans2.xml";
//实例化对象
ApplicationContext ApplicationContext = new ClassPathXmlApplicationContext(xmlPath);
//调用函数
//getBean函数传入id属性值获取对象
System.out.println(ApplicationContext.getBean("bean2"));
}
}
InstanceTest.java
<?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-4.3.xsd"> <bean id="bean2" class="com.liu.instance.static_factory.MyBean2Factory"
factory-method="createBean2">
</bean>
</beans>
beans2.xml
运行截图:
实例工厂实例化:
xml配置文件:
两个bean第一个为静态工厂,class为静态工厂类。第二个为bean3,factory-method属性配置实例工厂,factory-method确定使用工厂中哪个方法。
工厂类:
返回一个Bean3对象。
完整代码:
package com.liu.instance.factory;
/*
* lsq
* 2019-9-10
* Spring工厂实例化对象
*/
public class Bean3 { }
Bean3.java
<?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-4.3.xsd"> <bean id="bean2" class="com.liu.instance.static_factory.MyBean2Factory"
factory-method="createBean2">
</bean>
</beans>
bean3.xml
package com.liu.instance.factory;
/*
* lsq
* 2019-9-10
* Spring工厂实例化对象
*/
public class MyBean3Factory { public MyBean3Factory(){
System.out.println("Bean3工厂实例化中。。。");
}
public Bean3 createBean3(){
return new Bean3();
}
}
MyBean3Factory.java
package com.liu.instance.factory; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /*
* lsq
* 2019-9-10
* Spring工厂实例化测试类
*/
public class InstanceTest3 { public static void main(String[]args){
//指定配置文件路径
String xmlPath= "com/liu/instance/factory/bean3.xml";
//ApplicationContext加载配置文件时,对Bean进行实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); System.out.println(applicationContext.getBean("bean3"));
}
}
InstanceTest3.java
运行截图:
三种方法区别:
Spring实例化Bean三种方法:构造器、静态工厂、实例工厂的更多相关文章
- spring实例化bean三种方式
我看了这篇博文<https://www.cnblogs.com/zhanglei93/p/6221546.html>,以及自己实践总结了关于spring实例化bean对象的3种方式. 一. ...
- Bean实例化(三种方法)
(一)构造器实例化Bean 1. Bean1.java package com.inspur.ioc; public class Bean1 { } 2.Beans1.xml <?xml ver ...
- python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值
三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...
- Spring中bean实例化的三种方式
之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...
- Spring bean管理器 bean实例化的三种方式
bean实例化的三种方式实现 第一种:使用类的无参数构造方法创建(常用 重要) 第一种实例化方式最常用,实例化类时会通过调用无参构造方法创建.示例代码如下: package spring.com.Us ...
- spring注入bean的三种方法
在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. 在第一种利用bean config file(spring xml)方式中 ...
- 【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】
Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...
- Spring 实例化bean的三种方式
第一种方法:直接配置Bean <bena id="所需要实例化的一个实例名称" class="包名.类名"/> 例如: 配置文件中的bean.XML ...
- Spring bean三种创建方式
spring共提供了三种实例化bean的方式:构造器实例化(全类名,反射).工厂方法(静态工厂实例化 动态工厂实例化)和FactoryBean ,下面一一详解: 1.构造器实例化 City.jav ...
随机推荐
- linux中fork--子进程是从哪里开始运行
转自 http://blog.csdn.net/koches/article/details/7787468 fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值 ...
- nodejs基础(回调函数、模块、事件、文件读写、目录的创建与删除)
node官网:http://nodejs.cn/ 今天想看看node的视频,对node进一步了解, 1.我们可以从官网下载node到自己的电脑上,今天了解到node的真正概念,node时javascr ...
- phpstorm+xdebug安装配置
这个问题也困惑了我好久 烦死了 今天看了qing师傅的博客 跟着安装 运行环境: phpStorm 2018 PHP 5.45 nts VC9 Xdebug 2.4.1 0x01 PHP安装xdebu ...
- Infralution.Localization.Wpf
WPF Localization Using RESX Files Once you have downloaded the source code and built it, add a refer ...
- [java]察看两个日期间差多少秒/小时/天
Java 中Date类getTime()的方法返回从1970-1-1以来的毫秒数,这是下面函数运行的基础. package com.example.demo; import java.text.Par ...
- 【I·M·U_Ops】------Ⅱ------ IMU自动化运维平台之CMDB
说明本脚本仅作为学习使用,请勿用于任何商业用途.本文为原创,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. #A 我理解的 CMDB CMDB翻译过来,Configuratio ...
- LevelDB深入浅出之整体架构
LevelDB是一个可持久化的KV数据库引擎,由Google传奇工程师Jeff Dean和Sanjay Ghemawat开发并开源.无论从设计还是代码上都可以用精致优雅来形容,非常值得细细品味.本文将 ...
- JAVA 基础编程练习题20 【程序 20 求前 20 项之和】
20 [程序 20 求前 20 项之和] 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和. 程序分析:请抓住分子与分母的变化规律. pac ...
- CockroachDB学习笔记——[译]Scaling Raft
原文链接:https://www.cockroachlabs.com/blog/scaling-raft/ 原作者:Ben Darnell 原文日期:Jun 11, 2015 译:zifeiy 在Co ...
- IIS中应用Application Request Route 配置负载均衡
转自:https://blog.csdn.net/wucong60/article/details/84930234 简介ApplicationRequest Route(后面简称为ARR)是一个寄宿 ...