单例设计模式 vs Spring 容器中的单例 bean

112

众所周知,在Spring容器中,默认情况下我们拥有单例Bean,如果我们的Web应用程序基于Spring框架,则在这种情况下,我们是否真的需要实现Singleton设计模式来保存全局数据,而不仅仅是通过Spring创建一个Bean。

如果我没有能够解释清楚我的问题,请多包涵。

11个回答

1
每个容器每颗豆子。
        <bean id="myBean" class="com.spring4hibernate4.TestBean">
            <constructor-arg name="i" value="1"></constructor-arg>
            <property name="name" value="1-name"></property>
        </bean>

        <bean id="testBean" class="com.spring4hibernate4.TestBean">
            <constructor-arg name="i" value="10"></constructor-arg>
            <property name="name" value="10-name"></property>
        </bean>
    </beans>



    public class Test {

        @SuppressWarnings("resource")
        public static void main(String[] args) {
            ApplicationContext ac = new ClassPathXmlApplicationContext("ws.xml");
            TestBean teatBean = (TestBean) ac.getBean("testBean");
            TestBean myBean1 = (TestBean) ac.getBean("myBean");
            System.out.println("a : " + teatBean.test + " : "   + teatBean.getName());
            teatBean.setName("a TEST BEAN 1");
            System.out.println("uPdate : " + teatBean.test + " : "  + teatBean.getName());
            System.out.println("a1 : " + myBean1.test + " : " + myBean1.getName());
            myBean1.setName(" a1 TEST BEAN 10");
            System.out.println("a1 update : " + teatBean.test + " : " + myBean1.getName());
        }
    }

public class TestBean {
    public int test = 0;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private String name = "default";

    public TestBean(int i) {
        test += i;
    }
}

JAVA单例模式:
public class Singleton {
    private static Singleton singleton = new Singleton();
    private int i = 0;

    private Singleton() {
    }

    public static Singleton returnSingleton() {

        return singleton;
    }

    public void increment() {
        i++;
    }

    public int getInt() {
        return i;
    }
}

public static void main(String[] args) {
        System.out.println("Test");

        Singleton sin1 = Singleton.returnSingleton();
        sin1.increment();
        System.out.println(sin1.getInt());
        Singleton sin2 = Singleton.returnSingleton();
        System.out.println("Test");
        sin1.increment();
        System.out.println(sin1.getInt());
    }

<bean class="com.spring4hibernate4.TestBean"> <constructor-arg name="i" value="1"></constructor-arg> <property name="name" value="1-name"></property> </bean> <bean class="com.spring4hibernate4.TestBean"> <constructor-arg name="i" value="10"></constructor-arg> <property name="name" value="10-name"></property> </bean> </beans> - Hariprasad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接