三种实例化bean的方式
在spring中有三中实例化bean的方式:
一、使用构造器实例化;(90%通常使用的一个方法)
二、使用静态工厂方法实例化;
三、使用实例化工厂方法实例化。
每种实例化所采用的配置是不一样的:
一、使用构造器实例化;
这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现。
- <!--applicationContext.xml配置:-->
- <bean id="personService" class="cn.mytest.service.impl.PersonServiceBean"></bean>
id是对象的名称,class是要实例化的类,然后再通过正常的方式进调用实例化的类即可,比如:
- public void instanceSpring(){
- //加载spring配置文件
- ApplicationContext ac = new ClassPathXmlApplicationContext(
- new String[]{
- "/conf/applicationContext.xml"
- });
- //调用getBean方法取得被实例化的对象。
- PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService");
- psb.save();
- }
采用这种实例化方式要注意的是:要实例化的类中如果有构造器的话,一定要有一个无参的构造器。
二、使用静态工厂方法实例化;
根据这个中实例化方法的名称就可以知道要想通过这种方式进行实例化就要具备两个条件:(一)、要有工厂类及其工厂方法;(二)、工厂方法是静态的。OK,知道这两点就好办了,首先创建工程类及其静态方法:
- package cn.mytest.service.impl;
- /**
- *创建工厂类
- *
- */
- public class PersonServiceFactory {
- //创建静态方法
- public static PersonServiceBean createPersonServiceBean(){
- //返回实例化的类的对象
- return new PersonServiceBean();
- }
- }
然后再去配置spring配置文件,配置的方法和上面有点不同,这里也是关键所在
- <!--applicationContext.xml配置:-->
- <bean id="personService1" class="cn.mytest.service.impl.PersonServiceFactory" factory-method="createPersonServiceBean"></bean>
id是实例化的对象的名称,class是工厂类,也就实现实例化类的静态方法所属的类,factory-method是实现实例化类的静态方法。
然后按照正常的调用方法去调用即可:
- public void instanceSpring(){
- //加载spring配置文件
- ApplicationContext ac = new ClassPathXmlApplicationContext(
- new String[]{
- "/conf/applicationContext.xml"
- });
- //调用getBean方法取得被实例化的对象。
- PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService1");
- psb.save();
- }
三、使用实例化工厂方法实例化。
这个方法和上面的方法不同之处在与使用该实例化方式工厂方法不需要是静态的,但是在spring的配置文件中需要配置更多的内容,,首先创建工厂类及工厂方法:
- package cn.mytest.service.impl;
- /**
- *创建工厂类
- *
- */
- public class PersonServiceFactory {
- //创建静态方法
- public PersonServiceBean createPersonServiceBean1(){
- //返回实例化的类的对象
- return new PersonServiceBean();
- }
- }
然后再去配置spring配置文件,配置的方法和上面有点不同,这里也是关键所在
- <!--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是非静态工厂方法。
然后按照正常的调用方法去调用即可:
- public void instanceSpring(){
- //加载spring配置文件
- ApplicationContext ac = new ClassPathXmlApplicationContext(
- new String[]{
- "/conf/applicationContext.xml"
- });
- //调用getBean方法取得被实例化的对象。
- PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService2");
- psb.save();
- }
三种实例化bean的方式的更多相关文章
- (转)Spring的三种实例化Bean的方式
http://blog.csdn.net/yerenyuan_pku/article/details/52832793 Spring提供了三种实例化Bean的方式. 使用类构造器实例化. <be ...
- spring三种实例化bean的方式
1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public v ...
- Spring第四弹—–Spring的三种实例化bean的方式
1.使用类构造器实例化 1 <bean id=“orderService" class="cn.itcast.OrderServiceBean"/> 2. ...
- Spring中四种实例化bean的方式
本文主要介绍四种实例化bean的方式(注入方式) 或者叫依赖对象实例化的四种方式.上面的程序,创建bean 对象,用的是什么方法 ,用的是构造函数的方式 (Spring 可以在构造函数私有化的情况下把 ...
- Spring中三种配置Bean的方式
Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...
- Spring三种实例化Bean的方法
1.实例化bean的三种方法:(1) 构造器<!-- 体验1 --><bean id="personService" class="com.persia ...
- Spring入门学习(二)三种实例化bean的方法
前面的哪一种就是通过构造函数来实例化对象 下面我们可能用到工厂方法来视力话对象,这样我们的配置文件又该怎么配置呢 <bean name="service2" class=&q ...
- 三种定义bean的方式
方法一:基于XML的bean定义(需要提供setter方法) 1.首先编写student.java和teacher.java两个类 Student.java: public class Student ...
- 三种实例化委托的方式(C# 编程指南)
1.定义的委托和方法 delegate void TestDelegate(string s); static void M(string s) { Console.WriteLine(s); } 2 ...
随机推荐
- AngularJS 实现的输入自动完成补充功能
1.首先需要引入:angucomplete.js第三方库 2.增加model : var app = angular.module('app', ["angucomplete"]) ...
- css3 动画 执行一次
function testAnim(x) { $('#animationSandbox').removeClass().addClass(x + ' animated').one('webkitA ...
- android 实现橡皮擦效果以及保存涂鸦的功能
实现涂鸦.擦除.保存的功能 设置画笔为橡皮擦功能 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 如果你的画出来的是 ...
- Wall(凸包POJ 1113)
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 32360 Accepted: 10969 Description On ...
- 如何让其他计算机访问我的计算机上数据库mysql
第一种:能ping通,说明你们在同一个网络中,可以直接访问.你只要在你的登录用户中的帐号加上可外部访问就可以了...也就是授权.比如你的帐号是root 你可以进入mysql后, 你可以看到,每个帐 ...
- HDU 4810 Wall Painting
Wall Painting Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- js遍历
最近看了一些不错的文章关于js遍历+js数组去重+文件上传的,今天也自己动手试了试.有好多之前不是细节不是很了解.正好学习了. map函数也是 类似这样的对象还有函数的属性arguments对象,当然 ...
- await和async关键字来写异步程序
await和async关键字出现于.Net5.0,方便写异步程序. 例子: public class MyClass { public MyClass() { DisplayValue(); //这里 ...
- Python安装指南
说明:我的安装环境是centos6.4 ,32位系统:(#号之后内容为注释说明内容) 1.准备 centos是自带python的,所以可以在shell下直接执行:python 可以看到相应的打印信息, ...
- 【LTE基础知识】SGLTE, SVLTE, CSFB, VoLTE
4G网络下实现语音通话功能的技术共有三种--VoLTE.SGLTE(GSM /LTE同步并发)和CSFB(电路域回落).简单来说: VoLTE就是语音数据都在4G通道内完成: SGLTE是语音走2G通 ...