Spring bean的bean的三种实例化方式
Bean 定义
被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的,例如,已经在先前章节看到的,在 XML 的表单中的 定义。
spring bean的实例化方式一共有三种方式:
1.构造器构造bean
Spring可以使用默认构造器或者有参构造器创建Bean实例
有参构造器
UserService.java
package com.zk.spring;
public class UserService {
String name;
public UserService(String name)
{
this.name=name;
}
public void addUser(){
System.out.println(name);
}
}
TestDemo.java
package com.zk.spring; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestDemo {
@Test
public void test1(){
String xmlpath="ApplicationContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(xmlpath);
UserService us=(UserService) ac.getBean("UserService");
us.addUser();
}
}
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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="UserService" class="com.zk.spring.UserService">
<constructor-arg index="0" value="Spring"></constructor-arg>
</bean>
</beans>
运行效果图:

有参构造器
UserService.java
package com.zk.spring;
public class UserService {
public UserService(){
}
public void addUser(){
System.out.println("addUser");
}
}
TestDemo.java
package com.zk.spring; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestDemo {
@Test
public void test1(){
String xmlpath="ApplicationContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(xmlpath);
UserService us=(UserService) ac.getBean("UserService");
us.addUser();
}
}
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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="UserService" class="com.zk.spring.UserService"></bean>
</beans>
运行效果图:

2.使用实例工厂实例化Bean
实例化静态工厂注入bean,需要先实例化一个工厂类,然后通过由实例化工厂对象中的一个方法来创建bean,并注入到容器中。 在 bean 的 factory-bean 属性里指定拥有该工厂方法的 Bean;在 factory-method 属性里指定该工厂方法的名称;使用 construtor-arg 元素为工厂方法传递方法参数。
UserService接口
package com.zk.myspring;
public interface UserService {
public void addUser();
}
UserServiceImpl实现类
package com.zk.myspring;
public class UserServiceImpl implements UserService{
@Override
public void addUser() {
// TODO Auto-generated method stub
System.out.println("UserService 实例工厂");
}
}
MyBeanFactory实例工厂
package com.zk.myspring;
public class MyBeanFactory {
/*
* 创建实例工厂
*/
public UserService createService(){
return new UserServiceImpl();
}
}
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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- 将实例工厂实例交给spring
class确定实例工厂全限定类名
factory-method:确定静态方法名
-->
<bean id="MyBeanFactoryId" class="com.zk.myspring.MyBeanFactory"></bean>
<bean id="userserviceId" factory-bean="MyBeanFactoryId" factory-method="createService"></bean>
</beans>
运行效果图:

3.使用静态工厂创建Bean
利用静态工厂方法可以把bean注入到IOC容器中。在XML文件中配置bean时,要指定class的属性为工厂的类;factory-method属性指定工厂类中工厂方法,用于创建bean;constrctor-arg用于给工厂方法传递参数。
UserService.java
package com.zk.spring;
public interface UserService {
public void addUser();
}
UserServiceImpl.java
package com.zk.spring;
public class UserServiceImpl implements UserService{
@Override
public void addUser() {
// TODO Auto-generated method stub
System.out.println("UserService静态工厂");
}
}
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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!-- <bean id="UserService" class="com.zk.spring.UserService"></bean>-->
<bean id="UserServiceId" class="com.zk.spring.MyBeanFactory" factory-method="createService">
</bean>
</beans>
TestDemo.java
package com.zk.spring; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestDemo {
@Test
public void test1(){
String xmlpath="ApplicationContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(xmlpath);
UserService us=(UserService) ac.getBean("UserServiceId");
System.out.println(us);
us.addUser();
}
}
运行效果图:

参考:https://blog.csdn.net/u010502101/article/details/78638449
https://www.w3cschool.cn/wkspring/8kei1icc.html
Spring bean的bean的三种实例化方式的更多相关文章
- Bean的三种实例化方式
在面向对象程序中,如要使用某个对象,就需要先实例化这个对象.同样的,在Spring中,要想使用容器中的Bean,也需要实例化Bean.实例化Bean有三种方式,分别是:构造器实例化.静态工厂实例化.实 ...
- Spring的核心api和两种实例化方式
一.spring的核心api Spring有如下的核心api BeanFactory :这是一个工厂,用于生成任意bean.采取延迟加载,第一次getBean时才会初始化Bean Applicatio ...
- Spring学习日记01_IOC_xml的三种注入方式
什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...
- Spring第一课:基于XML装配bean(四),三种实例化方式:默认构造、静态工厂、实例工厂
Spring中基于XML中的装配bean有三种方式: 1.默认构造 2.静态工厂 3.实例工厂 1.默认构造 在我们在Spring的xml文件中直接通过: <bean id=" ...
- Java开发学习(四)----bean的三种实例化方式
一.环境准备 准备开发环境 创建一个Maven项目 pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 最终项目的结构如下: 二. ...
- Spring随笔 —— IOC配置的三种不同方式简介
在spring framework中,IOC的配置是最基础的部分,常见的配置方式有基于xml文件和基于注解的配置方式.除了这两种配置方式之外,今天这里再介绍另一种配置方式,先用小demo重温下我们熟悉 ...
- Spring事务之详解--三种实现方式
实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: /* * 账户 */ public class Accoun ...
- spring.handlers、spring.schemas、spring.tooling被覆盖的三种解决方式
在用到spring时,本地IDE里面跑的很正常,但是打jar包后在集群上运行时报错. 查找资料后确定了问题的根源,由于在依赖中调用了spring的许多包,每个包都有自己的spring.schemas文 ...
- spring三种实例化bean的方式
1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public v ...
随机推荐
- 题解【BZOJ4472】[JSOI2015]salesman
题面 树形\(\text{DP}\)与贪心的结合. 首先考虑树形\(\text{DP}\). 设\(dp_i\)表示从\(i\)出发,访问\(i\)的子树,并且最后回到\(i\)能获得的最大收益. 转 ...
- xrdp---远程桌面连接
xrdp is an Open Source Remote desktop Protocol server, which allows you to RDP to your Linux server ...
- OrCAD 仿真与仿真模块库介绍
PSpice A/D9.1个别时候可能会出现异常现象,例如:某一步后,突然电路图的电源极性被自动改变了!造成直流电压和直流电流不正常,输出无波形.所以应该趁正常的时候做好备份是明智的. PSpice ...
- (转)KMP算法
转自:http://blog.csdn.net/yutianzuijin/article/details/11954939 我们首先用一个图来描述kmp算法的思想.在字符串O中寻找f,当匹配到位置i时 ...
- codeforces div2_603 F. Economic Difficulties(树dfs预处理+dp)
题目连接:http://codeforces.com/contest/1263/problem/F 题意:有n个设备,上和下分别连接着一颗树,上下两棵树每棵树的叶子节点连接一个设备,两棵树的根节点都是 ...
- 294. 翻转游戏 II
题目: 链接:https://leetcode-cn.com/problems/flip-game-ii/ 你和朋友玩一个叫做「翻转游戏」的游戏,游戏规则:给定一个只有 + 和 - 的字符串.你和朋友 ...
- 接口自动化框架(Pytest,Allure,Yaml)
框架链接:https://www.jianshu.com/p/e31c54bf15ee 目前是基于他的框架做了些改动(主要是session.action()和json格式传参). 后续优化,应该主要思 ...
- C++/CLI剪辑
1.本地类中包含托管类成员变量的情况 #include<vcclr.h> // 必须包含vcclr.h头文件 //传入 A^ a = gcnew A(); gcroot<A^> ...
- 抽象语法树 Abstract syntax tree
什么是抽象语法树? 在计算机科学中,抽象语法和抽象语法树其实是源代码的抽象语法结构的树状表现形式 在线编辑器 我们常用的浏览器就是通过将js代码转化为抽象语法树来进行下一步的分析等其他操作.所以将js ...
- spring(三):BeanFactory
