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/beans https://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/beans https://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/beans https://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/beans https://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 { @Override public Object getObject() throws Exception { return RumenzA.createRumenzA(); } @Override public 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://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-06-28
本文作者:入门小站
本文来自:“掘金”,了解相关信息可以关注“掘金”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2020 云计算报告:约九成企业已使用云,微服务势头强劲,Serverless 应用保守
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 2020 年 1 月 9 日 -31 日,O’Reilly 开展了一个云计算应用的调研活动。本次调研总共收到了 1283 份回复,60% 受访者的岗位都与技术相关,55% 的受访者工作已经 5 年以上,其中 20% 受访者是软件架构师,11% 是公司技术负责人或架构师。 通过统计和分析调查问卷,我们发现了约九成的企业已经在使用云计算及其相关产品,公有云仍是企业主流的部署方式,微服务架构在云计算加持下,迎来“高光时刻”,而企业对于 Serverless 应用的态度还很保守。 超过 88% 的企业已使用云计算 根据调查结果显示,超过 88% 的企业在使用云计算,只有 10% 的受访者表示没有使用云计算。需要注意的是,这里的云计算是严格意义上的云,包括了软件即服务(SaaS)和平台即服务(PaaS)产品,例如电子邮件 Google G Suite、Microsoft Exchange Online,办公室生产力套件 Google 文档和表格、 Microsoft Office 365 以及其它...
- 下一篇
从零入门 Serverless | 一文详解 Serverless 架构模式
作者 |Hongqi 阿里云高级技术专家 本文整理自《Serverless 技术公开课》,关注“Serverless”公众号,回复入门,即可获取 Serverless 系列文章 PPT。 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS(函数即服务)和 BaaS(后端服务)服务来解决问题的一种设计。这个定义让我们对 Serverless 的理解稍显清晰,同时可能也造成了一些困扰和争论。 随着需求和技术的发展,业界出现了一些 FaaS 以外的其它形态的 Serverless 计算服务,比如 Google Cloud Run,阿里云推出的面向应用的 Serverless 应用引擎服务以及 Serverless K8s,这些服务也提供了弹性伸缩能力和按使用计费的收费模式,具备 Serverless 服务的形态,可以说进一步扩大了 Serverless 计算的阵营; 为了消除冷启动影响,FaaS 类服务如阿里云的函数计算和 AWS 的 Lambda 相继推出了预留功能,变得不那么“按使用付费”了; 一些基于...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- 2048小游戏-低调大师作品
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16