在Spring里面,当一个singleton bean依赖一个prototype bean,因为singleton bean是单例的,因此prototype bean在singleton bean里面也会变成单例.

这个怎么解决呢???可以使用Spring提供的lookup-method来注入。

举例说明:先列出相关类:代码中的说明足够说明问题。user类:prototype bean

package com.cn.pojo;import java.io.Serializable;public class User implements Serializable{/*** */private static final long serialVersionUID = 1L;private int userId;private String userName;private String userPwd;private String userInfo;public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd = userPwd;}public String getUserInfo() {return userInfo;}public void setUserInfo(String userInfo) {this.userInfo = userInfo;} }

LookupMethod类:singleton bean

package com.cn.springTest;import com.cn.pojo.User;/*** LookupMethod为singleton,user为propotype* 当singleton Bean依赖propotype Bean,可以使用在配置Bean添加look-method来解决* @author Administrator**/
public class LookupMethod {private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}}

核心配置文件:

<!-- user userbean --><bean id ="user" class="com.cn.pojo.User" scope="prototype"><property name="userId" value="1" /><property name="userName" value="userName" /><property name="userPwd" value="userPwd" /><property name="userInfo" value="userInfo" /></bean><!-- lookupMethod  LookupMethod为单例,user为原型的获取实例--><bean id ="lookupMethod" class="com.cn.springTest.LookupMethod"><!-- <property name="user" ref="user"/> -->  <!-- 这种写法会将user当着单例来获取--><lookup-method name="getUser" bean="user"/><!--lookup-method方式会将user当着原型来获取--></bean>

测试类:SpringLookupMethod

import com.cn.util.SpringContextUtil;public class SpringLookupMethod {public static void main(String[] args) {ApplicationContext actx = new ClassPathXmlApplicationContext("ApplicationContext.xml");actx.getBean("springContextUtil");LookupMethod lookupMethod = (LookupMethod) SpringContextUtil.getBean("lookupMethod");System.out.println(lookupMethod);LookupMethod lookupMethod1 = (LookupMethod) SpringContextUtil.getBean("lookupMethod");System.out.println(lookupMethod1);System.out.println(lookupMethod.getUser());System.out.println(lookupMethod1.getUser());System.out.println(lookupMethod.getUser());System.out.println(lookupMethod1.getUser());}}

注:在测试的时候除了spring相关包,发现缺少cglib-jar包。

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.1</version>
</dependency>

转载于:https://www.cnblogs.com/xubiao/p/5852445.html

当singleton Bean依赖propotype Bean,可以使用在配置Bean添加look-method来解决相关推荐

  1. java spring bean配置文件_Spring基于xml文件配置Bean过程详解

    这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过全类名来配置: class:be ...

  2. 启动SpringBoot项目,显示bean依赖注入失败,Error create bean with name ‘XXX‘

    从gitee上面download了一个项目,启动一个微服务模块一直显示Error create bean with name 'XXX' 一般情况下,这个问题很常见,小编我是遇到了好几次,但是一直懒, ...

  3. Spring(二)--FactoryBean、bean的后置处理器、数据库连接池、引用外部文件、使用注解配置bean等...

    实验1:配置通过静态工厂方法创建的bean  [通过静态方法提供实例对象,工厂类本身不需要实例化!] 1.创建静态工厂类 public class StaticFactory {private sta ...

  4. Spring-IOC—基于XML配置Bean

    Spring-IOC-基于XML配置Bean 1.Spring 配置/管理 bean 介绍 1.Bean 管理包括两方面 1.创建bean对象 2.给bean注入属性 2.Bean配置方式 1.基于x ...

  5. Spring学习(六)-Bean作用域与基于注解的配置

    Bean作用域 在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响.Spring一般采用sc ...

  6. bean注入属性_摆脱困境:将属性值注入配置Bean

    bean注入属性 Spring Framework对将从属性文件中找到的属性值注入到bean或@Configuration类中提供了很好的支持. 但是,如果将单个属性值注入这些类中,则会遇到一些问题. ...

  7. 摆脱困境:将属性值注入配置Bean

    Spring Framework对将从属性文件中找到的属性值注入到bean或@Configuration类中提供了很好的支持. 但是,如果将单个属性值注入这些类中,则会遇到一些问题. 这篇博客文章指出 ...

  8. 4. Spring 如何通过 XML 文件配置Bean,以及如何获取Bean

    在 Spring 容器内拼凑 bean 叫做装配.装配 bean 的时候,你是在告诉容器,需要哪些 bean ,以及容器如何使用依赖注入将它们配合在一起. 理论上,bean 装配的信息可以从任何资源获 ...

  9. spring 通过工厂方法配置Bean

    概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静 ...

最新文章

  1. 解决Selenium与firefox浏览器版本不兼容问题
  2. jdbcTemplate 后台接口中的分页
  3. java 消息传递示例_java actor模型和消息传递简单示例
  4. (37)zabbix snmp类型 无需安装agent也能监控
  5. SAP Fiori Elements List Report 里的表格类型(tableType)是如何决定出来的
  6. C#中搜索关键词高亮显示
  7. python脚本之家 包的创建和调用_python基础之包的导入和__init__.py的介绍
  8. MySQL锁系统总结
  9. 24-[模块]-re
  10. 查找树的指定层级_非递归层次遍历方法实现二叉树中指定节点的层次数查找
  11. Axure通用版电商后台管理系统+通用版移动端商城商户端+电商管理系统+对账管理+消息管理+内容管理+运营管理、会员管理、订单管理、促销管理、财务管理+通用版商城前后端电商系统+电商用户数据大屏看板
  12. 2021年中国超大容量耐磨喷油器市场趋势报告、技术动态创新及2027年市场预测
  13. xml Android 冒号,冒号字符在XML元素序列化过程中被编码为x003A
  14. JavaScript中的数据结构及实战系列(1):队列
  15. html播放flv直播源码,使用flv.js实现HTML5播放FLV视频文件
  16. 微信小程序使用webview打开pdf文档及显示网页内容
  17. LeetCode 229 求众数 II
  18. 李纯明博士的RSF算法源码.水平集医学图像分割
  19. git从远程仓库拉取指定日期版本的代码到本地
  20. 海外有哪些免费的0元虚拟主机(免费空间或者免费虚拟主机)

热门文章

  1. Spark on K8S 的几种模式
  2. golang获取变量地址值和指针变量示例
  3. Java访问修饰符public,private,protected,以及不写(默认)时的区别?
  4. 多级缓存中的一级缓存全网流量分发CDN
  5. Lua 数据类型--8 个基本数据类型
  6. 26个LinkedList用法示例大全以及与ArrayList/数组的相互转换
  7. Java异常中受检异常非受检异常与RuntimeException异常关系
  8. 删除文件夹时需要SYSTEM权限,简单解决
  9. dms系统与mysql_关于MySQL与DMsql探寻
  10. 《高效能人士的七个习惯》