bean的实例化有几种实现方式
三种实例化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注解之@Import注解的三种使用方式
目录 1.@Import注解须知 2.@Import的三种用法 3.@Import注解的三种使用方式总结 @ 1.@Import注解须知 1.@Import只能用在类上 ,@Import通过快速导入的 ...
- Spring中bean实例化的三种方式
之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...
- Spring bean管理器 bean实例化的三种方式
bean实例化的三种方式实现 第一种:使用类的无参数构造方法创建(常用 重要) 第一种实例化方式最常用,实例化类时会通过调用无参构造方法创建.示例代码如下: package spring.com.Us ...
- 【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】
Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...
- 浅谈 EF CORE 迁移和实例化的几种方式
出于学习和测试的简单需要,使用 Console 来作为 EF CORE 的承载程序是最合适不过的.今天笔者就将平时的几种使用方式总结成文,以供参考,同时也是给本人一个温故知新的机会.因为没有一个完整的 ...
- bean的实例化方式
spring中bean的实例化方式有三种,1.构造器实例化,2.实例工厂实例化,3.静态工厂实例化 1.构造器实例化方式 public class bean1 { public bean1() { } ...
- spring中bean实例化时机以及整个运转方式
接上一篇文章,一般在servlet获取到请求之后 在service方法中就可以完成所有的请求处理以及返回,但是我们会采用更高级的MVC框架来做.也就是说所有的MVC框架入口就是serlvet中的ser ...
- spring Bean的三种配置方式
Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...
- 【初识Spring】对象(Bean)实例化及属性注入(xml方式)
title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...
随机推荐
- jenkins1
持续集成工具: Jenkins 和 Hudson是同源的. 甲骨文和开源社区之间的关系破裂,该项目被分成两个独立的项目. Jenkins:由大部分原始开发人员组成,Hudson:由甲骨文公司继续管理 ...
- Codeforces 237A - Free Cash
题目链接:http://codeforces.com/problemset/problem/237/A Valera runs a 24/7 fast food cafe. He magically ...
- (2018干货系列八)最新VR学习路线整合
怎么学VR 即虚拟现实技术,是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的.交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中.VR/AR/ ...
- Django框架----跨表查询及添加记录
一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many); 一本书只应该由一个出版商出 ...
- Inferred type 'S' for type parameter 'S' is not within its bound;
在使用springboot 方法报错: Inferred type 'S' for type parameter 'S' is not within its bound; should extends ...
- 控制层和ajax用法的详解
商城项目第二天复习的内容 package cn.tedu.store.entity; public class ResponseResult<T> { public static fina ...
- Java连接数据库 #04# Apache Commons DbUtils
索引 通过一个简单的调用看整体结构 Examples 修改JAVA连接数据库#03#中的代码 DbUtils并非是什么ORM框架,只是对原始的JDBC进行了一些封装,以便我们少写一些重复代码.就“用” ...
- 在使用springMVC时,页面报的404异常
HTTP Status – Not Found Type Status Report Message /WEB-INF/test/hello.jsp Description The origin se ...
- Builgen 插件——IntelliJ IDEA和Eclipse Java Bean Builder模式代码生成器-比lombok更符合需求
builder模式在越来越多的项目中使用,类似于alibaba fastjson JSONObject.fluentPut(),调用一个方法后返回这个对象本身,特别适合构建一些参数超级多的对象,代码优 ...
- 【题解】Luogu P2522 [HAOI2011]Problem b
原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 我们看题面,让求对于区间\([a,b]\)内的整数x和\([c,d]\)内的y,满足$ gcd(x,y)=k$的数对的个数 我们珂以跟容斥原理(二 ...