Spring Bean初始化的几种常规方式
- 通过构造方法实例化
- 通过静态工厂实例化
- 通过实例工厂实例化
- 通过FactoryBean实例化
RumenzA实体类
package com.rumenz;
public class RumenzA {private String id;private String name;public static RumenzA createRumenzA(){RumenzA rumenzA=new RumenzA();rumenzA.setId("123");rumenzA.setName("入门小站");return rumenzA;}public RumenzA() {System.out.println("RumenzA 无参构造方法");}public RumenzA(String id) {this.id = id;System.out.println("ID构造方法");}// set get省略
}
构造方法
beans.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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="rumenz" class="com.rumenz.RumenzA" />
<bean id="rumenz1" class="com.rumenz.RumenzA"><constructor-arg name="id" value="1"/>
</bean>
</beans>
DemoApplication.java
package com.rumenz;import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DemoApplication {public static void main(String[] args) {ClassPathXmlApplicationContext ca=new ClassPathXmlApplicationContext("beans.xml");RumenzA rumenzA=(RumenzA)ca.getBean("rumenz");}}
输出
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz'
RumenzA 无参构造方法
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz1'
ID构造方法
静态工厂
beans.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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="rFactory" class="com.rumenz.RumenzFactory" factory-method="rumenzFactory"/>
<bean id="rFactory1" class="com.rumenz.RumenzFactory" factory-method="rumenzFactory"><constructor-arg name="id" value="111"/>
</bean>
</beans>
RumenzFactory工厂类
package com.rumenz;
public class RumenzFactory {//静态方法public static RumenzA rumenzFactory(){return new RumenzA();}public static RumenzA rumenzFactory(String id){return new RumenzA(id);}}
DemoApplication.java
package com.rumenz;import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DemoApplication {public static void main(String[] args) {ClassPathXmlApplicationContext ca=new ClassPathXmlApplicationContext("beans.xml");}}
输出
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rFactory'
RumenzA 无参构造方法
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rFactory1'
ID构造方法
实例工厂实例化
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="rFactory" class="com.rumenz.RumenzFactory" /><bean id="rumenz" factory-bean="rFactory" factory-method="rumenzFactory"></bean><bean id="rumenz1" factory-bean="rFactory" factory-method="rumenzFactory"><constructor-arg name="id" value="666"></constructor-arg></bean>
</beans>
RumenzFactory.java
package com.rumenz;
public class RumenzFactory {//不能用静态方法public RumenzA rumenzFactory(){return new RumenzA();}public RumenzA rumenzFactory(String id){return new RumenzA(id);}
}
DemoApplication.java
package com.rumenz;import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DemoApplication {public static void main(String[] args) {ClassPathXmlApplicationContext ca=new ClassPathXmlApplicationContext("beans.xml");//RumenzA rumenzA=(RumenzA)ca.getBean("rFactory1");}}
输出
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz'
RumenzA 无参构造方法
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz1'
ID构造方法
通过FactoryBean实例化
beans.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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="rumenz-by-factoryBean" class="com.rumenz.RumenzAFactoryBean"/>
</beans>
RumenzAFactoryBean.java
package com.rumenz;import org.springframework.beans.factory.FactoryBean;public class RumenzAFactoryBean implements FactoryBean {@Overridepublic Object getObject() throws Exception {return RumenzA.createRumenzA();}@Overridepublic Class<?> getObjectType() {return RumenzA.class;}
}
DemoApplication.java
package com.rumenz;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DemoApplication {public static void main(String[] args) {ClassPathXmlApplicationContext ca=new ClassPathXmlApplicationContext("beans.xml");RumenzA rumenzA=(RumenzA)ca.getBean("rumenz-by-factoryBean");}}
输出/异步加载bean
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz-by-factoryBean'
RumenzA 无参构造方法
源码 : https://github.com/mifunc/Spring-Bean-common-instantiate
Spring Bean初始化的几种常规方式相关推荐
- Spring Bean初始化的几种方法以及执行顺序
@PostConstruct 构造后置执行 @Bean(initMethod="xxx") 初始化功能 @InitializingBean#afterPropertiesSet 属 ...
- Spring Bean实例化的几种特殊方式
ServiceLoader 利用JDK里面的反向控制 ServiceLoaderFactoryBean AutowireCapableBeanFactory#createBean BeanDefini ...
- Spring中Bean初始化和销毁的多种方式
Spring中Bean初始化和销毁的多种方式 一.Bean的多种初始化方式 1.PostConstruct注解 2.实现InitializingBean接口 3.声明init-method方法 二.B ...
- spring框架xml的几种配置方式
spring框架xml的几种配置方式 ioc配置一般由一下两大类 1 手动装配 利用xml手动配置,分为:setter方法装配 ,构造器装配 2 自动装配 利用注解自动装配 准备工作:userdao ...
- spring bean初始化及销毁你必须要掌握的回调方法。
转载自 spring bean初始化及销毁你必须要掌握的回调方法. spring bean在初始化和销毁的时候我们可以触发一些自定义的回调操作. 初始化的时候实现的方法 1.通过java提供的@Pos ...
- spring Bean装配的几种方式简单介绍
Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系.作为开发人员,我们需要告诉Spring要创建哪些bean并且如何将其装配到一起. spring中bean装配有两种方式 ...
- Spring bean 初始化顺序
InitializingBean, init-method 和 PostConstruct 1.概述 从接口的名字上不难发现,InitializingBean 的作用就是在 bean 初始化后执行定制 ...
- Spring依赖注入的三种实现方式
依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念. 当某个JAVA实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例 ...
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation ...
最新文章
- Android fill_parent、wrap_content和match_parent的区别
- python开源代码-mtcnn python 开源代码详细图解
- aop实现原理-动态代理CGLib代理
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(1) - 概述
- Asp.net输出Excel文件并且下载该文件以及某些细节问题解决
- 为什么坚持一件事总是那么难,而且有时候总是三分钟热度?
- HTML/CSS基础知识总结
- Python 爬虫之 Requests 库
- 07.electron-(渲染进程和主进程)通信
- eclipse Git使用教程
- android 圆形自定义进度条,Android自定义漂亮的圆形进度条
- SPSS描述性统计--非连续变量的描述统计
- 南佛罗里达大学计算机科学硕士,南佛罗里达大学计算机科学理学硕士研究生申请要求及申请材料要求清单...
- 基于Android的无线视频监控的设计与实现 -- 开题报告
- 国产首发:上海川土微电子数字接口电源数字隔离芯片模拟芯片领导者
- unable to find account data for the submitted AuthenticationToken
- 蝙蝠侠最新截图----光影的典型例证
- 记一次华硕笔记本找不到引导问题BIOS能识别到硬盘但进不了系统
- 艺赛旗联合创始人胡立军:咨询机构、CIO和用户眼中的RPA「理想型」
- 如何使得一个div在页面居中显示
热门文章
- 在不重装系统的情况下创建Linux的Swap分区
- SpringBoot之Listener注册到Spring容器中的多种方法
- [Java] 蓝桥杯ALGO-64 算法训练 大小写判断
- python2.7.5 怎么装redis_python中Redis的简要介绍以及Redis的安装,配置
- 已停止工作_致命伤开始凸显,国外部分网络收音机已停止工作,沦为鸡肋之物...
- Java Servlet 和JSP教程(2)
- 关于Android工程师转成vue的三两事儿(4)--webpack
- 详解 SGA 与实例优化(部分)
- 多租户数据中心采用SDN的优势和挑战
- 详解收发不畅原因及U-Mail邮件中继解决之道