`

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中,单例模式可以通过多种方式来...

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

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

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

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

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

    单例设计模式在Java中是一种广为应用的设计模式,它的核心在于将类的构造方法私有化,从而实现对类实例化过程的控制。这种模式确保了在一个应用程序中,某个类只能产生一个实例对象,有助于限制对象的数量,并且能够...

    学习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

    本篇文章将详细讨论运行中单侧中主门或中调门突然关闭的紧急情况处理流程,以及在此类故障发生时,如何通过正确的步骤和操作来降低设备损害、保障机组稳定运行。 发电机组在运行中若遭遇单侧中主门或中调门意外关闭...

    spring mvc 自學筆記

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

Global site tag (gtag.js) - Google Analytics