您现在的位置是:首页 > 文章详情

Spring Bean初始化的几种常规方式

日期:2020-06-28点击:541

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


  • 通过构造方法实例化
  • 通过静态工厂实例化
  • 通过实例工厂实例化
  • 通过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
本文作者:入门小站
本文来自:“掘金”,了解相关信息可以关注“掘金”

原文链接:https://yq.aliyun.com/articles/766217
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章