(本文内容有网上+自己修改,如有错误,请指正,谢谢。)

在spring中实例化bean的方式:

一、使用构造器实例化;

这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现。

<Xml代码>
<!--applicationContext.xml配置:-->

<bean id="personService" class="cn.mytest.service.impl.PersonServiceBean"></bean>

id是对象的名称,class是要实例化的类,然后再通过正常的方式进调用实例化的类即可,比如:

<Java代码>
public void inSpring(){
//加载spring配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{ "/conf/applicationContext.xml"});
//调用getBean方法取得被实例化的对象。
PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService");
psb.save();
}

采用这种实例化方式要注意的是:要实例化的类中如果有构造器的话,一定要有一个无参的构造器。

二、使用静态工厂方法实例化;

根据这个中实例化方法的名称就可以知道要想通过这种方式进行实例化就要具备两个条件:
(一)、要有工厂类及其工厂方法;
(二)、工厂方法是静态的。OK,知道这两点就好办了,首先创建工程类及其静态方法:

<Java代码>
package ....;

/**
*创建一个工厂类 PersonServiceFactory
*
*/
public class PersonServiceFactory {
//创建静态方法
public static PersonServiceBean createPersonServiceBean(){
//返回实例化的类的对象
return new PersonServiceBean();
}
}
然后再去配置spring配置文件,配置的方法和上面有点不同,这里也是关键所在
<Xml代码>
<!--applicationContext.xml配置:-->

<bean id="personService1" class="cn.mytest.service.impl.PersonServiceFactory" factory-method="createPersonServiceBean"></bean>
id是实例化的对象的名称,class是工厂类,也就实现实例化类的静态方法所属的类,
factory-method是实现实例化类的静态方法。
然后按照正常的调用方法去调用即可:

<Java代码>
public void inSpring(){
//加载spring配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{ "/conf/applicationContext.xml"});
//调用getBean方法取得被实例化的对象。
PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService1");
psb.save();
}

三、使用实例化工厂方法实例化。

这个方法和上面的方法不同之处在与使用该实例化方式工厂方法不需要是静态的,但是在spring的配置文件中需要配置更多的内容,,首先创建工厂类及工厂方法:

<Java代码>
package ...;

/**
*创建工厂类 PersonServiceFactory
*
*/
public class PersonServiceFactory {
//创建静态方法
public PersonServiceBean createPersonServiceBean1(){
//返回实例化的类的对象
return new PersonServiceBean();
}
}

然后再去配置spring配置文件,配置的方法和上面有点不同,这里也是关键所在

<Xml代码>
<!--applicationContext.xml配置:-->
<bean id="personServiceFactory" class="cn.mytest.service.impl.PersonServiceFactory"></bean>
<bean id="personService2" factory-bean="personServiceFactory" factory method="createPersonServiceBean1"></bean>
这里需要配置两个bean,第一个bean使用的构造器方法实例化工厂类,第二个bean中的id是实例化对象的名称,factory-bean对应的被实例化的工厂类的对象名称,也就是第一个bean的id,factory-method是非静态工厂方法。

然后按照正常的调用方法去调用即可:

<Java代码>
public void instanceSpring(){
//加载spring配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{ "/conf/applicationContext.xml"});
//调用getBean方法取得被实例化的对象。
PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService2");
psb.save();
}

感谢 glzaction

Spring的三种Bean的实例化方法相关推荐

  1. (转)Spring的三种实例化Bean的方式

    http://blog.csdn.net/yerenyuan_pku/article/details/52832793 Spring提供了三种实例化Bean的方式. 使用类构造器实例化. <be ...

  2. 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程

    一.依赖注入DI 学习目标 1)搞清楚构造参数依赖注入的过程及类 2)搞清楚注解方式的属性依赖注入在哪里完成的. 学习思路 1)思考我们手写时是如何做的 2)读 spring 源码对比看它的实现 3) ...

  3. Spring(2)bean注入--Set方法注入

    Spring(2)bean注入–Set方法注入 Set 方法注入 新建一个空的 maven项目. 导入依赖 <properties><project.build.sourceEnco ...

  4. Spring的三种注入方式(为什么推荐构造器注入?)

    Spring的三种注入方式 一.属性注入 @Resource和@Autowired的区别 为什么尽量使用 @Resource? 二.setter 注入 三.构造器注入 具体可以看看Spring官网 为 ...

  5. Spring 异常处理三种方式

    Spring 异常处理三种方式 异常处理方式一. @ExceptionHandler 异常处理方式二. 实现HandlerExceptionResolver接口 异常处理方式三. @Controlle ...

  6. 【闲谈】论Spring的三种依赖注入方式

    知识点科普: IOC和DI:IOC是控制反转,DI是依赖注入.DI是行为,而IOC是实现这一行为的容器. 循环依赖:指类与类之间互相依赖的情况,比如有类A和类B,类A中依赖类B,类B中依赖类A,由此导 ...

  7. Spring的三种事务控制

    Spring的三种方式的事务控制 1:基于编程式的事务控制 1.1:编程式事务控制相关对象 PlatformTransactionManager接口是spring的事务管理器,他里面提供了我们常用的操 ...

  8. spring 支持几种 bean 的作用域?

    spring 支持几种 bean 的作用域? singleton:单例模式,在整个Spring IoC容器中,使用 singleton 定义的 bean 只有一个实例 prototype:原型模式,每 ...

  9. 三种权重的初始化方法

    总结了三种权重的初始化方法,前两种比较常见,后一种是最新的. 1. Gaussian Weights are randomly drawn from Gaussian distributions wi ...

最新文章

  1. html响应式布局media,JS中使用media实现响应式布局
  2. 使用Faster-Rcnn进行目标检测(实践篇)
  3. html生成xml文件,字符串xml生成xml文件
  4. 计算2的N次方(信息学奥赛一本通-T1170)
  5. flutter tab选项卡appbar下的选项卡
  6. PHP面向对象的魔术方法
  7. python语句示例_Python学习笔记之if语句的使用示例
  8. React Advanced 备忘
  9. eviews计算covar_covariance(eviews做协整检验步骤)
  10. Android studio @Author的使用以及TAG的自动生成
  11. 我的工作必装软件清单
  12. 使用 Tenderly 为区块链交易设置警报通知
  13. unity游戏,隐私协议最简单解决方案!仅3行代码就搞定!
  14. Windows下自动同步工具SyncToy的使用与定时执行部署
  15. 轻量级的双向绑定工具 —— ukulelejs
  16. 服务器上挂网站怎么挂,网站怎样上挂到云服务器
  17. 2017初秋最时髦服装搭配,裙子+短靴搭配
  18. 【微信小程序】 微信小程序连接本地接口
  19. InnoDB引擎Myslq数据库数据恢复
  20. PHP知识点总结(一)

热门文章

  1. 2020年终总结(苦难与坚韧并行)
  2. 本科毕业论文不会写怎么办?
  3. Linux—man手册使用
  4. es不建议模糊搜索_elasticsearch match模糊查询
  5. win10如何解决网络正常,打不开网页
  6. SpringBoot入门学习(五)之旅游网站项目
  7. [ROS项目]uuv_simulator概述
  8. 【NOI2018】归程(kruskal重构树)
  9. 趁着同事下午茶的时间,我们都学会了怎么批量给视频加滤镜
  10. 新零售三大优势?精准定位用户需求