当前位置: 首页 > news >正文

一个网站的建设步骤合肥网站建设策划方案

一个网站的建设步骤,合肥网站建设策划方案,重庆网站建设子沃科技公司,冷门不重名的公司名称一、什么是Spring#xff1f;谈谈你对IOC和AOP的理解。 Spring#xff1a; 是一个企业级java应用框架#xff0c;他的作用主要是简化软件的开发以及配置过程#xff0c;简化项目部署环境。 Spring的有点#xff1a; 1、Spring低侵入设计#xff0c;对业务代码的污染非…一、什么是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作用域每次都是生成一个新的对象所以不存在线程安全问题。 2sington作用域 默认就是线程不完全的。但是对于开发中大部分的Bean其实是无状态的不需要保证线程安全。所以在平常的MVC开发中是不会有线程安全问题的。 无状态表示这个实例没有属性对象 不能保存数据是不变的类。比如 controller、service、dao 有状态表示示例是有属性对象可以保存数据是线程不安全的 比如 pojo. ​ 但是如果要保证线程安全可以将Bean的作用域改为prototype 比如像 Model View。 ​ 另外还可以采用ThreadLocal来解决线程安全问题。ThreadLocal为每个线程保存一个副本变量 每个线程只操作自己的副本变量。 五、Spring如何处理循环依赖问题 循环依赖 多个对象之间存在循环的引用关系在初始化过程当中就会出现先有蛋还是先有鸡的问题。 一种是使用Lazy注解 解决构造方法造成的循环依赖问题 另一种是使用三级缓存 一级缓存缓存最终的单例池对象 private final MapString, Object singletonObjects new ConcurrentHashMap(256); 二级缓存缓存初始化的对象private final MapString, Object earlySingletonObjects new ConcurrentHashMap(16); 三级缓存缓存对象的ObjectFactory: private final MapString, ObjectFactory? singletonFactories new HashMap(16); 对于对象之间的普通引用二级缓存会保存new出来的不完整对象这样当单例池中找到不依赖的属性时就可以先从二级缓存中获取到不完整对象完成对象创建在后续的依赖注入过程中将单例池中对象的引用关系调整完成。 三级缓存如果引用的对象配置了AOP那在单例池中最终就会需要注入动态代理对象而不是原对象。而生成动态代理是要在对象初始化完成之后才开始的。于是Spring增加三级缓存保存所有对象的动态代理配置信息。在发现有循环依赖时将这个对象的动态代理信息获取出来提前进行AOP生成动态代理。 核心代码就在DefaultSingletonBeanRegistry的getSingleton方法当中。 protected Object getSingleton(String beanName, boolean allowEarlyReference) {// Quick check for existing instance without full singleton lockObject singletonObject this.singletonObjects.get(beanName);if (singletonObject null isSingletonCurrentlyInCreation(beanName)) {singletonObject this.earlySingletonObjects.get(beanName);if (singletonObject null allowEarlyReference) {synchronized (this.singletonObjects) {// Consistent creation of early reference within full singleton locksingletonObject this.singletonObjects.get(beanName);if (singletonObject null) {singletonObject this.earlySingletonObjects.get(beanName);if (singletonObject null) {ObjectFactory? singletonFactory this.singletonFactories.get(beanName);if (singletonFactory ! null) {singletonObject singletonFactory.getObject();this.earlySingletonObjects.put(beanName, singletonObject);this.singletonFactories.remove(beanName);}}}}}}return singletonObject;}六、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。
http://www.zqtcl.cn/news/471299/

相关文章:

  • 汕头网站制作推荐制作影视视频的软件
  • 定制程序网站宁波英文网站建设
  • 安康公司做网站网页设计怎么设计
  • 小型企业网站系统南京seo外包平台
  • 曲靖网站制作邢台网站制作那家便宜
  • wordpress中portfolio重庆网站seo按天计费
  • 做淘客网站需要多大的空间工程公司名称大全简单大气
  • 康县建设局网站网站做优化
  • 笔记网站开发代码下载了wordpress后
  • 北京招聘高级网站开发工程师域名最新通知
  • 企业如何实现高端网站建设西安百度推广开户
  • 广西城乡住房建设厅网站首页本地 安装 WordPress主题
  • 网站开发 技术方案设计一个软件需要多少钱
  • 网站如何做死链接提交建设银行网站官网网址
  • 网站难做吗承德平台
  • 手机备案网站营销网络建设怎么写
  • 建个网站要花多少钱WordPress密码重设怎么改
  • 招商网站建设免费网站改版 升级的目的
  • 安徽圣力建设集团网站如何自己开发微信小程序
  • 学院网站板块盘多多搜索引擎入口
  • 网站seo内部优化wordpress建站网站报错
  • 网站建设科技国外网站入口
  • 怎样用网站做淘宝推广免费的项目管理软件
  • 共青城网站建设微网站开发报价
  • 网站建设选超速云建站网站建设公司比较
  • 芜湖网络科技有限公司沈阳网站推广优化公司哪家好
  • 自己制作图片文字图片网站建设和优化内容最重要性
  • 邢台做网站优化建筑行业新闻资讯
  • 站长统计app最新版本2023网站标题是关键词吗
  • 中山精品网站建设市场wordpress登陆phpadmin