天天看点

Spring单例Bean中注入多例Bean

问题:

    当在一个单例Bean中注入一个多例Bean的时候,是获取不到那个多例对象的,因为,单例在初始化的时候,就直接初始化,这个多例Bean啦, 一直获取的是第一次初始化的Bean

配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/aop

        http://www.springframework.org/schema/aop/spring-aop.xsd">

        <bean id="single" class="com.lzd.spring.context.resource.test.bean.SingletonObject">

            <property name="prototypeObject" ref="prototype"></property>

        </bean>

        <bean id="prototype" class="com.lzd.spring.context.resource.test.bean.PrototypeObject" scope="prototype">

            <property name="name" value="刘东"></property>

            <property name="password" value="123"></property>

            <!-- <aop:scoped-proxy/> -->

</beans>

SingletonObject对象:

package com.lzd.spring.context.resource.test.bean;

public class SingletonObject {

    private PrototypeObject prototype;

    public void setPrototypeObject(PrototypeObject prototype){

        this.prototype = prototype;

    }

    public PrototypeObject getPrototype(){

        return this.prototype;

}

PrototypeObject对象:

/**

 *

 * <P>Description: 这是一个多例的对象</P>

 * @ClassName: PrototypeObject

 * @author lzd  2017年2月15日 上午10:54:52

 */

public class PrototypeObject {

    private String name;

    private String password;

    public String getName() {

        return name;

    public void setName(String name) {

        this.name = name;

    public String getPassword() {

        return password;

    public void setPassword(String password) {

        this.password = password;

ApplicationResourceTest测试类:

package com.lzd.spring.context.resource.test;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.lzd.spring.context.resource.test.bean.SingletonObject;

public class ApplicationResourceTest {

    @Test

    public void applicationResource(){

        ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:application.xml"});

        SingletonObject s = (SingletonObject) context.getBean("single");

        for (int i = 0; i < 10; i++)

        System.out.println(s.getPrototype());

Spring单例Bean中注入多例Bean

问题解决:

            <!-- 添加下面,一行,每次创建的,都是一个代理对象,然后注入获取的都是新的对象 -->

            <aop:scoped-proxy/>

测试结果:

Spring单例Bean中注入多例Bean