`

spring中单例中获取新的bean实例

    博客分类:
  • JAVA
阅读更多

spring中配置的单例实例中,如果需要每次获取新的属性对象,有两种方式。1、采用配置文件中的lookup-method元素   2、实现BeanFactoryAware接口。

public interface AxeInter {
	public void chop();
}

 

public class StoneAxe implements AxeInter {
	@Override
	public void chop() {
		System.out.println("石头斧头");
	}
}

 

<bean id="axe" class="springTest.impl.StoneAxe" scope="prototype">
</bean>

 

 

  1.  采用配置文件中的lookup-method元素

 

public abstract class UserService2 {
	public abstract AxeInter getAxe();
}

 注意:没有get、set方法

 

 

<bean id="userService2" class="springTest.impl.UserService2">
		<lookup-method name="getAxe" bean="axe"/>
	</bean>

 

public class CopyOfSpringTest1 {

	private ApplicationContext context = null;
	

	@Before
	public void before(){
		context = new ClassPathXmlApplicationContext("applicationContext.xml");
	}
	
	@Test
	public void testMoreInstanceInSingleInstance(){
		UserService2 userService = context.getBean("userService2", UserService2.class);
		System.out.println(userService);
		System.out.println(userService.getAxe());
		
		UserService2 userService2 = context.getBean("userService2", UserService2.class);
		System.out.println(userService2);
		System.out.println(userService2.getAxe());
	}
}

 

   2.实现BeanFactoryAware接口。

public class UserService implements BeanFactoryAware{

	private AxeInter axe;
	private BeanFactory beanFactory;
	
	public AxeInter getAxe() {
		this.axe = (AxeInter)beanFactory.getBean("axe");
		return axe;
	}

	@Override
	public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
		this.beanFactory = beanFactory;
	}
}

 注意:没有axe的set方法

<bean id="userService" class="springTest.impl.UserService">
	</bean>

 

@Test
	public void testMoreInstanceInSingleInstance(){
		UserService userService = context.getBean("userService", UserService.class);
		System.out.println(userService);
		System.out.println(userService.getAxe());
		
		UserService userService2 = context.getBean("userService", UserService.class);
		System.out.println(userService2);
		System.out.println(userService2.getAxe());
	}

 

 

分享到:
评论

相关推荐

    Java多线程编程环境中单例模式的实现

    ### Java多线程编程环境中单例模式的实现 #### 概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用非常广泛,特别是在资源管理、日志记录、...

    JAVA中单例模式的几种实现方式.doc

    ### JAVA中单例模式的几种实现方式 #### 1. 线程非安全的基本实现方式 单例模式是设计模式中的一种常用形式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式可以通过多种方式来...

    浅谈Java中单例设计模式之构造方法私有化.pdf

    "浅谈Java中单例设计模式之构造方法私有化" 单例设计模式是 Java 中一种常用的设计模式,核心思想是将类的构造方法私有化,以控制实例化对象的产生。这种模式可以确保在程序中只有一个实例化对象存在,这对控制对象...

    基于php设计模式中单例模式的应用分析

    单例模式是软件设计模式中的一种,它的核心思想是确保某个类在整个应用程序中只有一个实例存在。在PHP中,单例模式常用于管理共享资源,如数据库连接或全局配置,以优化性能并提供统一的访问入口。 单例模式的实现...

    c++中单例模式对象的释放控制

    单例模式的主要目的是限制一个类的实例化次数为一次,同时提供一个全局访问点来获取这个唯一实例。这在系统中某些资源只能有一个实例时非常有用,比如数据库连接、日志对象等。 #### 2. 传统实现方式的问题 在C++...

    学习SSM源码分析的一次实践,自己实现SSM框架

    在spring中最核心的就是IOC容器,默认采用的是通过单例的模式来进行管理我们注入到Ioc中的bean(当然我们也是可以修改成其他的模式,暂且不讨论),在spring中单例模式是采用注册的方式来实现的单例模式,所以我也是...

    java单例模式实例

    单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们...

    Android应用正确的退出方式(单例模式)

    Android应用正确的退出方式(单例模式)

    java 中单例模式饿汉式与懒汉式的对比

    java 中单例模式是保证一个类仅有一个实例,并提供一个访问它的全局访问点的设计模式。单例模式有以下特点:单例类只能有一个实例,单例类必须自己自己创建自己的唯一实例,单例类必须给所有其他对象提供这一实例。 ...

    py源码实例excel处理实例单工作簿拆分到多工作簿中单表中

    ### py源码实例:Excel处理实例——单工作簿拆分至多工作簿中的单表 #### 背景介绍 在日常办公自动化处理任务中,经常需要对Excel文档进行批量处理,例如数据清洗、格式调整等。对于某些特定场景,如需要将一个较...

    Qt实现程序单实例运行

    4. **拒绝新实例**:如果发现已有实例,`QTSingleApplication`的`isRunning()`方法返回true,这时新实例可以决定是否继续执行,通常选择退出。 在提供的源码中,可能对这两种方案进行了修改,例如优化了文件锁的...

    Kotlin中单例模式和Java的对比浅析

    Kotlin 中单例模式是指在应用程序中确保某个类仅有一个实例,并提供一个全局访问点的机制。单例模式是一种常用的设计模式,在 Java 和 Kotlin 中都有多种实现方式。下面我们将对比 Kotlin 中单例模式和 Java 中单例...

    C#中单例的实现方法

    本文实例讲述了C#中单例的实现方法。分享给大家供大家参考。具体实现方法如下: 代码如下: #region “实现这个窗口类的单例,单例类常用于被主窗口以show()方法打开的窗口,使用单例后只会打开一个此类的对象”  /...

    Python中单例模式总结

    在Python编程中,单例模式是一种设计模式,它限制了类的实例化过程,确保一个类只有一个实例,并提供全局访问点。这种模式在需要频繁实例化然后销毁的对象,或者创建对象需要消耗大量资源的场景下非常有用,因为它...

    xmljava系统源码-SpringInAction4:《SpringInAction4th》学习笔记

    Spring中单例的概念限于Spring上下文中,遵守约定 内部bean适用于setter注入和构造器注入,内部bean不能被复用 SpEL表达式 3. 高级装配 4 种自动装配 byName, byType, contructor, autodetect 可以在一个应用上下...

    Java中单例模式详解

    单例模式是软件设计模式中的一种,其核心思想是确保一个类在整个应用程序中只存在一个实例。这种模式常用于创建那些需要全局访问且资源管理的类,如线程池、缓存、对话框等。在Java中,实现单例模式主要有三种方式:...

    SQL Server中单引号的两种处理技巧

    在SQL Server中,单引号(')是一个特殊字符,用于定义字符串常量。当在构建动态SQL语句时,如果查询条件中的变量包含了单引号,不进行特殊处理会导致SQL语法错误。以下是对标题和描述中所述知识点的详细解释: 1. ...

    运行中单侧中主门或者中调门突然关闭.doc

    【标题】:“运行中单侧中主门或者中调门突然关闭.doc” 【描述】:文档涉及的内容是处理运行中的电力设备,特别是当单侧中主门或中调门突然关闭时的操作流程和注意事项,以及相关系统(DEH、MEH、BPC、EH)的故障...

    spring mvc 自學筆記

    这里提到的“验证单例多用构造方法”可能是指 Spring MVC 中单例 Bean 的生命周期问题。Spring 管理的 Bean 默认是单例模式,即在整个应用中只有一个实例。当 Bean 采用构造方法初始化时,无论多少次请求,构造函数...

Global site tag (gtag.js) - Google Analytics