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 ...
随机推荐
- PyCharm专业版2019.3.2激活码到期2089年!!!
Pycharm是一款很好用的python开发工具,开发Python爬虫和Python web方面都很不错 这里我为大家提供了pycharm激活方式2089年(都支持PyCharm20 激活步骤如下: ...
- Android 开发 SurfaceView 总结
Android中一种常见的自定义画UI接口类:SurfaceView.可以在异步线程中,完成相关数据更新. 首先介绍几个基本的定义,在其他知识中也会设计如下名词: 1.Paint 画笔,所有的图像.图 ...
- IntelliJ IDEA常规配置教程
IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具(git.sv ...
- Itext相关知识
最近需求用到office和pdf相关知识,office使用poi操作的,pdf则使用Itext操作 Itext官网: http://itextpdf.com/ Itext7相关使用示例:https:/ ...
- 解决windows10 OBS Studioobsstudio显示器捕获黑屏
前提设置显卡,下载OBS studio 64bit别下载32bit了 如果电脑desktop右键无法显示NAVIDIA 控制面板则需要win+R 输入 msconfig选取服务,勾选所有NAIVI ...
- Resharper快捷键使用
1: Alt+F7将你光标所在位置的变量的所有使用以列表的方式显示出来,显示结果的窗体可以像其他窗体那样停靠. 它的优点包括: 可以从所有使用中挑选只显示read usage或者write usa ...
- crowdfunding项目01——感人的错误
四十搭环境,半个小时下载jar包,网速感人,一个半小时找bug真是感动 首先SSM项目,主要功能进行增删改查 建立父工程和子工程,产生依赖关系 父工程:pom 子工程:jar.war(web工程) 错 ...
- 图像滤波—opencv函数
函数原型 方框滤波 ,-), bool normalize = true, int borderType = BORDER_DEFAULT) 均值滤波 ,-), int borderType = ...
- yii2 场景使用
场景定义 //场景 const SCENARIO_USER_CREATE='0';//前台用户新增 const SCENARIO_USER_UPDATE='1';//前台用户更新 场景配置 publi ...
- S3C2440之存储控制器学习记录
/==========翻译S3C2440存储控制器部分================/ 5 存储控制器 概述 S3C2440内存控制器为外部存储访问提供内存控制信号. S3C2440A有如下特征: ...
