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

网站开发系统设计哪个网站可以免费学设计

网站开发系统设计,哪个网站可以免费学设计,纺织网站建设方案,19目录 什么是Spring? Spring的优缺点#xff1f; 优点#xff1a; 缺点#xff1a; Spring IOC的理解 Spring AOP的理解 事务的边界为什么放在service层#xff1f; Spring Bean的生命周期 什么是单例池#xff1f;作用是什么#xff1f; 单例Bean的优势 Bean…目录 什么是Spring? Spring的优缺点 优点 缺点 Spring IOC的理解 Spring AOP的理解 事务的边界为什么放在service层 Spring Bean的生命周期 什么是单例池作用是什么 单例Bean的优势 BeanFactory的作用 BeanDefinition的作用 BeanFactory和ApplicationContext有什么区别 配置Bean有哪几种方式 Spring实例化Bean方式的几种方式 什么是Bean的自动装配 自动装配需要注意 Spring自动装配Bean有哪些方式 通过XML文件 通过注解 Spring如何解决循环依赖问题 什么是循环依赖 Spring是如何解决循环依赖的 是否只要是构造方法注入的Bean所产生的的循环依赖都是无法解决的 Spring Bean是不是线程安全的 如何解决单例bean线程安全问题 Spring中的事务 事务的四大特征ACID Spring支持的事务管理类型 实现声明式事务的两种方式 Spring事务的传播行为 什么是Spring? Spring是轻量级的开源的框架它是一个容器框架用来封装javaBean对象并维护对象之间的关系是一个整合其他框架的框架可以让我们更加快速更加简洁的开发。 Spring的核心是IOC控制反转和AOP面向切面。 IOC是指将对象的创建权交给Spring容器。在Spring之前对象的创建都是需要程序员自己通过new关键字创建的而使用Spring之后对象的创建交由Spring创建。对象之间的依赖关系也是交由Spring处理降低耦合度。 AOP面向切面编程可以在不修改原有代码的基础上添加非业务功能将主业务功能与非业务功能分离可以让编程人员全身心投入到主业务代码中。 Spring的优缺点 优点 通过Spring提供的IOC容器我们可以将对象之间的依赖关系交由Spring进行控制降低耦合。 通过AOP功能方便进行面向切面编程在不修改代码的情况下可以对业务代码进行增强减少代码提高开发效率维护方便。 对主流框架提供了很好地支持例如Mybatis等。 低入侵式设计。 提供了事务管理只需要一个注解Transaction。 方便程序的测试spring实现测试使我们结合Junit非常方便测试。 缺点 使用大量的反射机制占用内存影响效率。 Spring IOC的理解 三方面IOC是什么容器、控制反转的理解、依赖注入 IOC容器实际上就是一个Map里面存的是各种对象在xml里配置的bean节点Repository、Service、Controller、Component等在项目启动的时候会读取配置文件里面的bean节点根据全限定类名使用反射创建对象放到map里面扫描注解的类还是用反射创建对象并放到map中。 这个时候map里就有各种对象了接下来我们在代码里需要用到里面的对象时在通过DI注入Autowired、Resource等注解xml中bean节点里的ref属性项目启动的时候会读取xml节点ref属性根据id注入 控制反转在没有引入控制反转之前对象A依赖于对象B对象A在初始化或者运行到某个点的时候就需要主动的创建对象B或者是使用已经创建的对象B无论是已经创建的还是主动创建的对象B控制权都在程序员自己手中也就是说B对象什么时候创建都有A对象决定。 引入IOC之后A对象和B对象都依赖于IOC容器而A和B对象之间没有联系当对象A运行到需要对象B的时候IOC容器会主动创建或者对象时单例的话就直接调用对象B注入到对象A需要的地方。 通过前后的对比不难看出来对象A获得依赖对象B的过程由主动变为了被动行为控制权颠倒过来了这就是“控制反转”这个名词的由来。 依赖注入控制被反转之后获得依赖对象的过程由自身管理变成了由IOC容器主动注入。依赖注入是实现IOC的方法就是由IOC容器在运行期间动态的将某种依赖关系注入到对象之中。 控制反转的作用主要是降低代码之间的耦合度Spring IOC除了减低代码的耦合度外还会管理对象的创建和依赖关系的维护。 Spring AOP的理解 AOP面向切面编程通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 能够将那些与业务代码无关却又被业务模块所使用的功能例如日志管理事务管理等封装起来便于减少系统的重复代码降低模块间的耦合度并有利于未来的扩展和维护。 SpringAOP是基于动态代理的如果要代理的对象实现了某个接口就会使用jdk动态代理去创建代理对象如果没有实现接口的对象使用CGLIB动态代理生成一个被代理对象的子类作为代理。 事务的边界为什么放在service层 事务通常可能会涉及到多张表的操作也就意味着在service层涉及到多个dao的操作假设一个dao调用成功并且已经提交事务了而另一个dao执行失败了而我们的事务的边界在service层在同一个地方里可以进行回滚但是如果我们把事务放在各个dao层里面的话第一个成功了第二个即使失败了也无法控制第一个dao的回滚所以我们的事务的边界要放在service层。 Spring Bean的生命周期 解析类得到BeanDefinition 如果有多个构造方法则要推断构造方法 确定好构造方法之后进行实例化得到对象 对对象中添加了Autowired的属性进行属性填充 回调Aware方法比如BeanNameAwareBeanFactoryAware 调用BeanPostProcessor的初始化前的方法 调用初始化方法 调用BeanPostProcessor的初始化后的方法在这里会进行AOP 如果当前创建的Bean是单例的则会放入到单例池中 使用Bean Spring容器关闭时调用DisposableBean中destory方法 什么是单例池作用是什么 如果Bean对象是singleton单例Bean时在Spring在创建Bean的时候会有将Bean对象存入一个Map集合中在集合中以Bean的名称为key在后续程序中有使用到该bean的时候直接从集合中获取以达到单例bean的效果。 单例Bean的优势 减少了新生成实例的消耗新生成实例消耗包括两个方面①Spring通过反射来创建Bean对象②对象内存分配。 减少jvm垃圾回收。由于不会每次都重写创建Bean对象自然就会减少垃圾回收。 可以快速获取到bean。 BeanFactory的作用 BeanFactory是Spring中非常核心的一个顶层接口 是Bean的“工厂”、它的主要职责是生产Bean 它实现了简单工厂的设计模式通过调用getBean传入标识生产一个Bean 它有非常多的实现类每个工厂都有不同的职责功能最强大的工厂是DefaultListableBeanFactory Spring底层就是用该实现工厂生产Bean的 BeanDefinition的作用 它主要存储Bean的定义信息决定Bean的生产方式。 bean classcom.exp.User iduser scopesingleton lazyfalse /bean BeanFactory会根据Bean的这些信息生产Bean比如实例化可以通过class进行反射进而得到实例对象比如lazy 则不会在IOC加载是创建Bean BeanFactory和ApplicationContext有什么区别 BeanFactory和ApplicationContext是Spring的两大核心接口都可以当做Spring的容器。它们之间的关系ApplicationContext是BeanFactory的子接口。 二者区别 作用 BeanFactory接口作用是Spring里面最底层的接口包含了各种Bean的定义读取Bean配置文件管理BeanDefinition加载实例化控制Bean的生命周期维护Bean之间的依赖关系。BeanFactory简单粗暴可以理解为就是一个HashMapKey是BeanNameValue是Bean实例。通常只提供put和get功能可以称之为“低级容器”。 配置Bean有哪几种方式 xmlbean classcom.exp.User iduser 注解Component等前提是需要配置扫描包component-scan反射调用构造方法 javaConfigBean 可以自己控制实例化过程 import Spring实例化Bean方式的几种方式 构造方法反射 静态工厂方式factory-method 实例工厂方式Beanfactory-beanfactory-method FactoryBean方式 什么是Bean的自动装配 Bean的配置是将Bean组装在一起前提是需要知道Bean的依赖关系。 在Spring框架中在配置文件中设定Bean的依赖关系是一个很好地机制Spring容器能够自动配置相互合作的Bean这意味着容器不需要手动配置能通过Bean工厂处理Bean之间的协作。 自动装配需要注意 一定要声明set方法 仍然可以使用constructor-arg和property配置来定义依赖,这些配置将始终覆盖自动注入 不能自动装配简单数据类型的属性 Spring自动装配Bean有哪些方式 Spring中实现自动装配Bean主要有两种方式通过xml文件、通过注解。 通过XML文件 xml文件中bean标签有一个指定自动装配类型的属性AutowiredAutowired有4中装配类型。 byName根据名称自动装配。 byType根据类型自动装配。 constructorSpring容器会尝试找到那些类型与构造函数相匹配的Bean。 bean idstudent5 classcom.www.spring.modle.Student autowirebyNameproperty namename value张其/property nameid value7/property namenum value1007/!--在这里可以不用写property nameadmin refadmin/ 因为autowirebyName就表示通过实体类中set方法的名称在容器中找到相同id值的bean然后赋值--/bean 通过注解 主要是通过Autowired等注解完成,前面提到了将类声明为bean的几个注解通过Component将类声明为Bean通过Value将某个常量值注入到变量中通过Autowired将Bean装配到属性中。 Spring如何解决循环依赖问题 什么是循环依赖 循环依赖的定义其实就是A依赖与BB也依赖于A或者是A自身依赖。 Spring是如何解决循环依赖的 Spring是通过三级缓存来解决循环依赖的。 在DefaultSingletonBeanRegistry类中提供了三个缓存其实就是三个map集合。 一级缓存singletonObjects用于保存实例化、注入、初始化完成的Bean对象 二级缓存earlySingletonObject用户保存实例化完成的Bean实例提前暴露对象。 三级缓存singletonFactories用于保存创建bean的工厂。 spring在创建对象A时先将A对象的工厂对象放入到三级缓存中去然后实例化A到属性注入时需要B对象此时容器中没有B对象又转而创建B对象同样将B对象的工厂对象存入三级缓存中实例化B对象属性注入时需要A对象从三级缓存中获取到A对象的工厂对象对象B属性注入完成之后将其放入到二级缓存中同时从三级缓存中删除B工厂接下来初始化B对象初始化完成后将B对象放入到一级缓存中并且从二级缓存中删除BB对象创建结束返回创建A完成属性b的注入后续步骤与B对象属性注入完成后的步骤相同。 创建对象和属性注入时都会执行getBean方法来获取对象在获取对象时最重要的是执行getSingleton方法 由源码可知在该方法中先从一级缓存中获取对象如果没有就去二级缓存中找二级没有就去三级中找三级中如果找到就将该对象放入到二级缓存中并且删除三级缓存如果三级还没有就表明该对象还没有被创建过。 是否只要是构造方法注入的Bean所产生的的循环依赖都是无法解决的 不是的两个Bean都是通过构造方法注入的是无法解决的但是一个是属性注入一个是构造注入时就可能会解决如果先创建的Bean是构造方法注入那么开始就无法提供半成品Bean这时是无法解决的但是如果先创建的是通过属性注入方式的Bean那么是可以解决的。 依赖注入方式是否可以解决两个都是构造方法注入否两个都是属性注入是A中的注入方式是构造方法注入B中注入方式是属性注入否A中的注入方式是属性注入B中注入方式是构造方法注入是 Spring Bean是不是线程安全的 这个要看Bean的作用域scope如果是原型Bean的话每次多会创建一个新的对象线程之间不会存在共享自然不存在线程安全问题如果是单例Bean全局只有一个对象存在资源竞争。 Bean又分为①有状态Bean有数据存储功能包含成员变量会对这个Bean的成员变量进行写操作线程不安全②无状态Bean不会保存数据例如controllerservice等线程安全的。 如何解决单例bean线程安全问题 Bean找那个尽量不定义成员变量 将Bean定义为多例Bean Spring中的事务 事务的四大特征ACID 原子性原子性是指事务包含的所有操作要么全部执行要么全部不执行。 一致性是指事务必须使得数据库从一个一致性状态转换到另一个一致性状态也就是说一个事务执行之前和之后都必须处于一致性状态。例如转账AB两个用户一共有10000元无论两个人如何转账始终都是10000元不变 隔离性是指当多个用户并发访问数据库时比如操作同一张表数据库为每个用户开启的事务不能被其他事务的操作所干扰多个并发事务之间要相互隔离。 持久性是指事务一旦被提交数据将永久性保存。 Spring支持的事务管理类型 Spring支持两种事务类型 编程式事务管理这意味着将通过编程的方式管理事务会带来极大的灵活但是难维护。 声明式事务管理意味着你可以将业务代码和事务管理分离只需要通过注解和XML配置来管理事务。 实现声明式事务的两种方式 基于tx和aop命名空间的声明式事务管理其最大特点是与Spring结合紧密可以充分利用切点表达式的强大支持使得事务管理更加灵活。 基于Transactional的全注解方式将声明式事务管理简化到了极致。开发人员只需要在配置文件中加入一行启用相关后处理Bean的配置然后在需要实施事务管理的方法或者类上使用Transaction指定事务规则可实现事务管理而且功能也不比其他方式逊色。 Spring事务的传播行为 事务的传播特性指的是当一个事务方法被另一个事务方法调用时这个方法应该如何进行。 PROPAGATION_REQUIRED:如果当前没有事务 事务传播行为类型外部不存在事务外部存在事务使用方式REQUIED开启新的事务融合到外部事务中Transaction(propagationPropagation.REQUIRED) 适合增删改查SUPPORTS不开启新的事务融合到外部事务中Transaction(propagationPropagation.SUPPORTS) 适合查询REQUIEDS_NEW开启新的事务不用外部事物,创建新的事务Transaction(propagationPropagation.REQUIEDS_NEW) 适合内部事务和外部事务不存在业务关系情况,如日志NOT_SUPPORTED不开启新的事务不用外部事物Transaction(propagationPropagation.NOT_SUPPORTED) 不常用NEVER不开启新的事务抛异常Transaction(propagationPropagation.NEVER) 不常用MANDATORY抛出异常融合到外部事务中Transaction(propagationPropagation.MANDATORY) 不常用NESTED开启新的事务融合到外部事务中,SavePoint机制,外层印象内层,内层不会影响外层Transaction(propagationPropagation.NESTED) 不常用
http://www.sczhlp.com/news/161570/

相关文章:

  • 做网站挣钱么网站建设怎样做好
  • 网站建设联系方式医疗网站建设案例
  • 盐城专业网站建设哪家好计算机网站建设是什么意思
  • 站长之家模板公众号登录平台官网
  • 创科手机网站网站建设开发方式包括一l丫
  • 户外商品网站制作能注册通用网址的网站
  • 服务器搭建网站用什么系统深圳华强北赛格大楼晃动
  • 嘉兴市做外贸网站的公司Wordpress手机短信
  • 哪里有免费做网站网站备案怎么转入
  • 给窗帘做网站徐州自助建站软件
  • 手机怎么建立网站做下载网站赚钱
  • 梅州建站多少钱清涧县住房和成乡建设局 网站
  • 全国免费自学网站抖音直播间引流推广方法
  • 建筑工程发布网站什么外贸网站做箱包好
  • 如何做h5 网站自建wordpress主题
  • 十大排行装修公司手机关键词排名优化
  • 网站怎么加关键词做优化公司如何建立微网站
  • 迁安网站建设清空wordpress
  • 嘉里建设网站自己做盗版小说网站吗
  • 健康门户网站建设内容如何优化网站加载速度
  • 网站系统升级维护需要多长时间汕头住房与城乡建设网站
  • 商业网站建设案例课程深圳公司网站建设案例
  • 沈阳专业网站制作团队制作单位网站
  • 站长之家网站素材嘉兴网站开发公司
  • 做网站需要学会写代码吗自己做的网站申请软著
  • canvas网站源码小程序制作需要什么技术
  • 手机移动网站建设建立微信商城网站
  • iis7.0建设网站酉阳网站制作
  • 网站设计开发的销售主要工作wordpress自己写页面
  • 有哪些大站用wordpress广西网络干部学院