网站免费建站方法,手机创建网页,科技网站小编,网站内容管理系统使用说明书有状态对象和无状态对象
参考#xff1a;https://www.cnblogs.com/xubiao/p/6567349.html
一. 基本概念
1. 什么是有状态对象 有状态对象指的是有数据存储功能的类的对象。#xff08;就是类含有字段或属性#xff0c;他的对象含有实例变量#xff0c;可以保存数据…有状态对象和无状态对象
参考https://www.cnblogs.com/xubiao/p/6567349.html
一. 基本概念
1. 什么是有状态对象 有状态对象指的是有数据存储功能的类的对象。就是类含有字段或属性他的对象含有实例变量可以保存数据 有状态对象Stateful Bean就是有实例变量的对象可以保存数据是非线程安全的。 2. 什么是无状态对象 无状态对象就是一次操作的对象不能保存数据的对象。 无状态对象Stateless Bean指的就是没有实例变量的对象不能保存数据是不可变类是线程安全的对象。 二. 代码实现有状态对象和无状态对象
1. 有状态对象的实现
Test类
package com.xiyou.activemq.po;import lombok.Data;/*** 这是一个实体类该类是一个有状态对象因为该类有实例变量*/Data
public class Test {private Integer id;private String address;
}StatefulBeanService类
package com.xiyou.activemq.service;import com.xiyou.activemq.po.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 该类是一个有状态对象因为里面有实例变量Test并且Test并不是一个无状态对象*/
Service
public class StatefulBeanService {Autowiredprivate Test test;public void test(){System.out.println(这是一个有状态对象因为该类有实例变量TestTest类是一个有状态的对象);}}
2. 无状态对象的实现
TestDao类
package com.xiyou.activemq.dao;import org.springframework.stereotype.Component;Component
public class TestDao {public void test(){System.out.println(这里没有有状态对象该类的对象就是一个无状态对象);}
}StatelessBeanService类
Service
public class StatelessBeanService {// 虽然testDao是一个实例对象但是该实例对象却是一个无状态对象因此这个类也是一个无状态对象Autowiredprivate TestDao testDao;public void testStatelessBean(){System.out.println(这是一个无状态对象虽然这里有实例对象但是该对象是一个无状态对象因此这里也是一个无状态对象);}
}
三. Spring中的有状态和无状态
通过上面的分析我们大概知道了什么是有状态对象什么是无状态对象。无状态的Bean适用于不变模式技术就是单例模式这样单例模式j间的实例共享能够提高性能。有状态的bean多环境下不安全适用于property原型模式。Property在每次对bean的请求都会创建一个bean的实例默认情况下Spring Bean的工厂取得的所有实例是singleton容器只存在一个共享的beanscope的选择 重要 1有状态的bean都使用property作用域 2无状态的bean则使用singleton的作用域如Service层和Dao层直接用Singletob即可。虽然Service的类也有Dao这类的属性但是Dao这些类都是没有状态信息的也就是不变类所以不影响。
四. Servlet是单例模式
Servlet体系结构是建立在Java多线程机制上的他的生命周期是由Web容器负责的一个Servlet类在Application中只有一个实例存在也就是说有多个线程都在使用这个实例。这是单例模式的应用。无状态的单例模式是线程安全的但是如果我们在Servlet中使用了实例变量那么就变成了有状态的就变成了singleton有状态这个就是非线程安全的。
总结一下
无状态的单例模式是线程安全的有状态的单例模式是线程不安全的单例搭配无状态对象singleton无状态对象多例搭配有状态对象property有状态对象