欢迎来到 鸡西市某某烘焙维修网点
全国咨询热线:020-123456789
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能
  来源:鸡西市某某烘焙维修网点  更新时间:2024-04-29 23:07:53

发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能

前言

华夏ERP基于SpringBoot框架和SaaS模式 ,发现立志为中小企业提供开源好用的款基ERP软件 ,目前专注进销存+财务+生产功能 。的带进主要模块有零售管理、系销存采购管理 、统自销售管理 、财务仓库管理、生产财务管理、发现报表查询、款基系统管理等。的带进支持预付款 、系销存收入支出、统自仓库调拨、财务组装拆卸、生产订单等特色功能 。发现拥有库存状况、出入库统计等报表 。同时对角色和权限进行了细致全面的控制 ,精确到每个按钮和菜单 。

项目总述

  • 很多人说华夏ERP(英文名 :jshERP)是目前人气领先的国产ERP系统
  • 虽然目前只有进销存+财务+生产的功能 ,但后面会推出ERP的全部功能 ,有兴趣请帮点一下 Star 哦
  • 演示地址 :http://47.116.69.14 演示账号:jsh ,密码 :123456

开发初衷

  • 华夏ERP立志为中小企业提供开源好用的ERP软件,降低企业的信息化成本
  • 个人开发者也可以使用华夏ERP进行二次开发,加快完成开发任务 关注Java项目分享
  • 初学JAVA的小伙伴可以下载源代码来进行学习交流

技术框架

  • 核心框架 :SpringBoot 2.0.0
  • 持久层框架:Mybatis 1.3.2
  • 日志管理:Log4j 2.10.0
  • JS框架 :Jquery 1.8.0
  • UI框架: EasyUI 1.9.4
  • 模板框架: AdminLTE 2.4.0
  • 项目管理框架: Maven 3.2.3
  • API接口框架: swagger2.7.0(ip:port/doc.html)

开发环境

建议开发者使用以下环境 ,可以避免版本不一致带来的问题

  • IDE: IntelliJ IDEA 2017+
  • DB: Mysql5.7+
  • JDK: JDK1.8
  • Maven: Maven3.2.3+

服务器环境

  • 数据库服务器 :Mysql5.7+
  • JAVA平台: JRE1.8
  • 操作系统:Windows、Linux等

开源说明

  • 本系统100%开源 ,遵守GPL-3.0协议

系统美图

  • 首页
发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能
  • 零售管理
发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能
  • 采购管理


发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能


  • 销售管理


发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能


  • 仓库管理


发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能


  • 财务管理


发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能


  • 报表查询


发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能


  • 商品管理


发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能


  • 基本资料
发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能
  • 系统管理


发现一款基于SpringBoot的ERP系统,自带进销存+财务+生产功能


源码资料获取方式:关注小编+转发文章+私信【 0626】免费获取 ! !!!


一 、什么是Spring ?谈谈你对IOC和AOP的理解  。

Spring: 是一个企业级java应用框架  ,他的作用主要是简化软件的开发以及配置过
程,简化项目部署环境。
Spring的有点 :
1、Spring低侵入设计,对业务代码的污染非常低 。
2、Spring的DI机制将对象之间的关系交由框架处理 ,减少组件的耦合 。
3  、Spring提供了AOP技术 ,支持将一些通用的功能进行集中式管理 ,从而提供更
好的复用。
4 、Spring对于主流框架提供了非常好的支持。
IOC就是控制反转,指创建对象的控制权转移给Spring来进行管理。简单来说 ,就
是应用不用去new对象了 ,而全部交由Spring自动生产 。
IOC有三种注入方式:1 、 构造器注入 2、setter方法注入 3、根据注解注入。
AOP 面向切面 。用于将那些与业务无关 ,但却能对多个对象产生影响的公共行为。抽
取并封装成一个可重用的模块。AOP的核心就是动态代理。JDK的动态代理 和
CGLIB动态代理 。

二 、Spring容器的启动流程是怎么样的 ?

使用AnnotationConfigApplicationContext 来跟踪一下启动流程: this(); 初始化reader和scanner
scan(basePackages); 使用scanner组件扫描basePackage下的所有对象 ,将配置
类的BeanDefinition注册到容器中。
refresh(); 刷新容器 。
prepareRefresh 刷新前的预处理
obtainFreshBeanFactory : 获取在容器初始化时创建的BeanFactory
prepareBeanFactory: BeanFactory的预处理工作 ,会向容器中添加一些组件 。
postProcessBeanFactory: 子类重写该方法 ,可以实现在BeanFactory创建并
预处理完成后再做进一步的设置 。
invokeBeanFactoryPostProcessors : 在BeanFactory初始化之后执行
BeanFactory的后处理器。


registerBeanPostProcessors : 向容器中注册Bean的后处理器 ,他的主要作用
就是干预Spring初始化Bean的流程,完成代理 、自动注入 、循环依赖等这些功能 。
initMessageSource : 初始化messagesource组件,主要用于国际化。
initApplicationEventMulticaster : 初始化事件分发器
onRefresh: 留给子容器 ,子类重写的方法,在容器刷新的时候可以自定义一些
逻辑。
registerListeners: 注册监听器。
finishBeanFactoryInitialization: 完成BeanFactory的初始化 ,主要作用是初始
化所有剩下的单例Bean  。
finishRefresh: 完成整个容器的初始化,发布BeanFactory容器刷新完成的事
件 。

三、Spring框架中Bean的创建过程是怎样

的 ?首先,简单来说,Spring框架中的Bean经过四个阶段 : 实例化 -》 属性赋值 -》
初始化 -》 销毁
然后: 具体来说 ,Spring中Bean 经过了以下几个步骤 :
1、实例化: new xxx(); 两个时机: 1  、当客户端向容器申请一个Bean时,2 、
当容器在初始化一个Bean时发现还需要依赖另一个Bean。 BeanDefinition 对象保
存 。-到底是new一个对象还是创建一个动态代理  ?
2、设置对象属性(依赖注入):Spring通过BeanDefinition找到对象依赖的其他对
象 ,并将这些对象赋予当前对象。
3 、处理Aware接口 :Spring会检测对象是否实现了xxxAware接口 ,如果实现
然后 ,就会调用对应的方法。
BeanNameAware、BeanClassLoaderAware 、BeanFactoryAware、
ApplicationContextAware


4 、BeanPostProcessor前置处理 : 调用BeanPostProcessor的
postProcessBeforeInitialization方法
5、InitializingBean: Spring检测对象如果实现了这个接口 ,就会执行他的
afterPropertiesSet()方法 ,定制初始化逻辑 。
6 、init-method: 如果Spring发现Bean配置了这个属性 ,就会调用他的配置方
法 ,执行初始化逻辑。@PostConstruct
7、BeanPostProcessor后置处理 : 调用BeanPostProcessor的
postProcessAfterInitialization方法

到这里 ,这个Bean的创建过程就完成了 , Bean就可以正常使用了 。

8 、DisposableBean : 当Bean实现了这个接口,在对象销毁前就会调用
destory()方法。
9、destroy-method: @PreDestroy

四、Spring框架中的Bean是线程安全的吗  ?

如果线程不安全 ,要如何处理?Spring容器本身没有提供Bean的线程安全策略 ,因此 ,也可以说Spring容器中的
Bean不是线程安全的 。
要如何处理线程安全问题,就要分情况来分析 。
Spring中的作用域 : 1 、 sington 2、prototype: 为每个Bean请求创建给实例 。
3 、request :为每个request请求创建一个实例,请求完成后失效 。 4 、 session :
与request是类似的 。 5 、global-session:全局作用域 。
对于线程安全问题 :
1> 对于prototype作用域 ,每次都是生成一个新的对象,所以不存在线程安全问
题。
2>sington作用域 : 默认就是线程不完全的。但是对于开发中大部分的Bean ,其实
是无状态的 ,不需要保证线程安全  。所以在平常的MVC开发中 ,是不会有线程安全
问题的。

无状态表示这个实例没有属性对象 , 不能保存数据,是不变的类  。比
如 : controller 、service、dao
有状态表示示例是有属性对象 ,可以保存数据,是线程不安全的 , 比如
pojo.
但是如果要保证线程安全,可以将Bean的作用域改为prototype 比如像 Model
View 。
另外还可以采用ThreadLocal来解决线程安全问题 。ThreadLocal为每个线程保存
一个副本变量 , 每个线程只操作自己的副本变量 。

五 、Spring如何处理循环依赖问题?

循环依赖: 多个对象之间存在循环的引用关系,在初始化过程当中,就会出现"先有
蛋还是先有鸡"的问题 。


一种是使用@Lazy注解: 解决构造方法造成的循环依赖问题
另一种是使用三级缓存一级缓存 :缓存最终的单例池对象: private final Map<String, Object>
singletonObjects = new ConcurrentHashMap<>(256);
二级缓存 :缓存初始化的对象 :private final Map<String, Object>
earlySingletonObjects = new ConcurrentHashMap<>(16);
三级缓存:缓存对象的ObjectFactory: private final Map<String,
ObjectFactory<?>> singletonFactories = new HashMap<>(16);


对于对象之间的普通引用,二级缓存会保存new出来的不完整对象,这样当单例池
中找到不依赖的属性时,就可以先从二级缓存中获取到不完整对象 ,完成对象创建
建 ,在后续的依赖注入过程中,将单例池中对象地引用关系调整完成。
三级缓存:如果引用的对象配置了AOP  ,那在单例池中最终就会需要注入动态代理
对象,而不是原对象。而生成动态代理是要在对象初始化完成之后才开始的。于是
Spring增加三级缓存 ,保存所有对象的动态代理配置信息 。在发现有循环依赖时 ,
将这个对象的动态代理信息获取出来,提前进行AOP,生成动态代理。
核心代码就在DefaultSingletonBeanRegistry的getSingleton方法当中 。

protected Object getSingleton(String beanName, boolean allowEarlyReference)n{ n// Quick check for existing instance without full singleton locknObject singletonObject = this.singletonObjects.get(beanName);nif (singletonObject == null &&nisSingletonCurrentlyInCreation(beanName)) { nsingletonObject = this.earlySingletonObjects.get(beanName);nif (singletonObject == null && allowEarlyReference) { nsynchronized (this.singletonObjects) { n// Consistent creation of early reference within fullnsingleton locknsingletonObject = this.singletonObjects.get(beanName);nif (singletonObject == null) { nsingletonObject =nthis.earlySingletonObjects.get(beanName);nif (singletonObject == null) { nObjectFactory<?> singletonFactory =nthis.singletonFactories.get(beanName);nif (singletonFactory != null) { nsingletonObject =nsingletonFactory.getObject();nthis.earlySingletonObjects.put(beanName,nsingletonObject);nthis.singletonFactories.remove(beanNamen}n}n}n}n}nreturn singletonObject;n}n

六、Spring如何处理事务?

Spring当中支持编程式事务管理和声明式事务管理两种方式 :
1  、编程式事务可以使用TransactionTemplate 。
2 、声明式事务: 是Spring在AOP基础上提供的事务实现机制。他的最大优点就是
不需要在业务代码中添加事务管理的代码,只需要在配置文件中做相关的事务规则
声明就可以了 。但是声明式事务只能针对方法级别 ,无法控制代码级别的事务管理
理。
Spring中对事务定义了不同的传播级别: Propagation
1  、 PROPAGATION_REQUIRED :默认传播行为。 如果当前没有事务 ,就创建一
新事务 ,如果当前存在事务 ,就加入到事务中。
2、PROPAGATION_SUPPORTS: 如果当前存在事务 ,就加入到该事务  。如果当
前不存在事务,就以非事务的方式运行。


3、PROPAGATION_MANDATORY: 如果当前存在事务,就加入该事务  。如果当
前不存在事务 ,就抛出异常。


4 、PROPAGATION_REQUIRES_NEW: 无论当前存不存在事务 ,都创建新事务进
行执行  。


5、PROPAGATION_NOT_SUPPORTED : 以非事务方式运行 。如果当前存在事
务必,就将当前事务挂起。


6、PROPAGATION_NEVER : 以非事务的方式运行 。如果当前存在事务 ,就抛出异议
常 。


7、PROPAGATION_NESTED: 如果当前存在事务,则在嵌套事务内执行;如果当
前没有事务 ,则按REQUEIRED属性执行 。
Spring中事务的隔离级别:
1、ISOLATION_DEFAULT : 使用数据库默认的事务隔离级别。
2、ISOLATION_READ_UNCOMMITTED : 都未提交 。允许事务在执行过程中,必须
取其他事务未提交的数据 。
3、ISOLATION_READ_COMMITTED: 读已提交。允许事务在执行过程中 ,读取
其他事务已经提交的数据 。
4、ISOLATION_REPEATABLE_READ : 可重复读 。 在同一个事务内,任意时刻的
查询结果是一致的 。
5 、ISOLATION_SERIALIZABLE : 所有事务依次执行。

七 、SpringMVC中的控制器是不是单例模

式 ?如果是 ,如何保证线程安全  ?
控制器是单例模式。
单例模式下就会有线程安全问题。
Spring中保证线程安全的方法
1 、将scop设置成非singleton 。 prototype, request 。
2 、最好的方式是将控制器设计成无状态模式。在控制器中 ,不要携带数据 。但是可
以引用无状态的service和dao。

源码资料获取方式  :关注小编+转发文章+私信【 0626】免费获取 ! ! !!


友情链接tbc附魔符文精金棒哪里出-锻造精金棒图纸哪里弄?wow德鲁伊皮甲肩膀幻化翅膀,这个幻化是_tbc猎人皮甲漫话周热点DNF窗口化实用工具:提升游戏体验的利器2019年广西中小学教师公开招聘考试真题试卷答案及解析.docxVIPdnf打孔镶嵌徽章颜色怎么选(地下城与勇士徽章打孔位置推荐)dnf女鬼剑详解 女鬼剑两大分支剑神与剑魔技能展示csgo狂牙大行动最新版《lol手游》射手强度排名G99版酷比魔方iplay 50min高配版即将到来dnf黎明裂缝多少级开启(dnf黎明裂缝每日入场次数限制)教你如何选购猫眼石, 看完不再被忽悠!如何提升游戏速度、性能dnf异界气息装备怎么分解二舅火了出现二舅币,发行人疑似诈骗 130 万美金后跑路,哪些信息值得关注?80惩戒骑天赋(80惩戒骑天赋团本前装备bis)2018表现满分选手 曾一个人打垮一个队无尽之剑2女生献血真的不好吗?地铁笨蛋5,地铁笨蛋5小游戏,2214小游戏,www.2214.cn魔兽世界s2(魔兽世界S2套装)不思议迷宫遗落的祭坛通关打法 揪出隐藏冈布奥梦幻手游合宝宝攻略 轻松打造最强宠物 让你称霸全服赛尔号冰之契约阿克希亚怎么打:攻略与技巧EasyN易视眼多视窗软件 v2.0.28.5359 免费电脑版dnf武神毕业的白金徽章2021英雄联盟手游s11赛季什么时候结束(英雄联盟手游s11赛季时间)?王者荣耀s19赛季什么时候结束了《DNF》泰波尔斯崩坏的乐园怎么打 泰波尔斯崩坏的乐园打法攻略讲解Xinputemulator中文版_xinputemulator v3.27(模拟360手柄)补丁dnf100级男街霸勋章徽章选什么 100级男街霸徽章勋章守护珠推荐《原神》四星法器白辰之环怎么获取哔哩哔哩2023年硬核会员题库答案是什么 哔哩哔哩2023年硬核会员题库答案大全《DNF》混沌之神奥兹玛全种类卡片属性详解 奥兹玛团本附魔攻略玩英雄联盟取消固定视角后,怎么做才可以让自己的视角不会乱飞?cf抽奖技巧(cf抽奖技巧一定神器)王者荣耀s19赛季什么时候结束了《碧蓝幻想Versus:崛起》v20240228十六项修改器风灵月影版魔兽世界附魔1-375怎么升级最省材料 附魔1-375升级最省钱攻略血精灵适合什么职业—魔兽世界血精灵适合什么职业血精灵之选职业大揭秘
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.2093

Copyright © 2024 Powered by 鸡西市某某烘焙维修网点   sitemap