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

国企怎么做网站sem是什么公司

国企怎么做网站,sem是什么公司,长沙网站建设的首选,软件外包什么意思文章目录#xff1a; 1.什么是Spring#xff1f; 2.Spring由哪些模块组成#xff1f; 3.Spring中都用到了哪些设计模式#xff1f; 4.什么是Spring IOC容器#xff1f;有什么作用#xff1f; 5.Spring IoC的实现机制 6.BeanFactory 和 ApplicationContext有什么区别…文章目录 1.什么是Spring 2.Spring由哪些模块组成 3.Spring中都用到了哪些设计模式 4.什么是Spring IOC容器有什么作用 5.Spring IoC的实现机制 6.BeanFactory 和 ApplicationContext有什么区别 7.什么是Spring的依赖注入(Dependency Injection) 8.什么是Spring AOP 9.Spring AOP 与 AspectJ AOP 有什么区别AOP 有哪些实现方式 10.解释一下Spring AOP里面的几个名词 11.Spring AOP中的通知有哪些类型 12.Spring支持的几种bean的作用域 13.解释一下Spring中bean的生命周期 14.Spring支持的事务管理类型 Spring事务实现方式有哪些你更倾向用哪种事务管理类型 15.什么是Spring事务的传播行为 16.什么是Spring事务的隔离级别 1.什么是Spring Spring是一个轻量级Java开源框架最早由Rod Johnson创建目的是解决企业级应用开发的复杂性简化Java开发。Spring为开发Java应用程序提供全面的基础架构支持因此Java开发者可以专注于应用程序的开发。 Spring可以做很多事情它为企业级开发提供给了丰富的功能但是这些功能的底层都依赖于它的两个核心特性也就是控制反转IoC也可以说依赖注入DI和面向切面编程AOP。 为了降低Java开发的复杂性Spring采取了以下4种关键策略 基于POJO的轻量级和最小侵入性编程通过依赖注入和面向接口实现松耦合基于切面和惯例进行声明式编程通过切面和模板减少样板式代码。 Spring设计目标Spring为开发者提供一个一站式轻量级应用开发平台 Spring设计理念在JavaEE开发中支持POJO和JavaBean开发方式使应用面向接口开发充分支持OO面向对象设计方法Spring通过IoC容器实现对象耦合关系的管理并实现依赖反转将对象之间的依赖关系交给IoC容器实现解耦 Spring框架的核心IoC容器和AOP模块。通过IoC容器管理POJO对象以及他们之间的耦合关系通过AOP以动态非侵入的方式增强服务把遍布于应用各层的功能分离出来形成可重用的功能组件。 2.Spring由哪些模块组成 spring core提供了框架的基本组成部分包括控制反转Inversion of ControlIOC和依赖注入Dependency InjectionDI功能。spring beans提供了BeanFactory是工厂模式的一个经典实现Spring将管理对象称为Bean。spring context构建于 core 封装包基础上的 context 封装包提供了一种框架式的对象访问方法。spring jdbc提供了一个JDBC的抽象层消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析 用于简化JDBC。spring aop提供了面向切面的编程实现让你可以自定义拦截器、切点等。spring Web提供了针对 Web 开发的集成特性例如文件上传利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。spring test主要为测试提供支持的支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。 3.Spring中都用到了哪些设计模式 工厂模式BeanFactory就是简单工厂模式的体现用来创建对象的实例单例模式Bean默认为单例模式。代理模式Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术模板方法用来解决代码重复的问题。比如RestTemplate, JmsTemplate, JpaTemplate。观察者模式定义对象间一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都会得到通知被动更新如Spring中listener的实现–ApplicationListener。 4.什么是Spring IOC容器有什么作用 控制反转即IoC (Inversion of Control)它把传统上由程序代码直接操控的对象的调用权交给容器通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对对象组件控制权的转移从程序代码本身转移到了外部容器。 Spring IOC 负责创建对象管理对象通过依赖注入DI装配对象配置对象并且管理这些对象的整个生命周期。) IoC容器的作用 管理对象的创建和依赖关系的维护。对象的创建并不是一件简单的事在对象关系比较复杂时如果依赖关系需要程序猿来维护的话那是相当头疼的解耦由容器去维护具体的对象托管了类的整个生命周期比如我们需要在类的产生过程中做一些处理最直接的例子就是代理如果有容器程序可以把这部分处理交给容器应用程序则无需去关心类是如何完成代理的 5.Spring IoC的实现机制 Spring 中的 IoC 的实现原理就是工厂模式加反射机制。 package com.szh.spring;/****/ interface Fruit {void eat(); }class Apple implements Fruit {public Apple() {System.out.println(Apple类的无参构造执行了....);}Overridepublic void eat() {System.out.println(苹果);} }class Banana implements Fruit {public Banana() {System.out.println(Banana类的无参构造执行了....);}Overridepublic void eat() {System.out.println(香蕉);} }class Factory {public static Fruit getInstance(String className) {Fruit fruit null;try {fruit (Fruit) Class.forName(className).newInstance();} catch (Exception e) {e.printStackTrace();}return fruit;} }public class Client {public static void main(String[] args) {Fruit fruit Factory.getInstance(com.szh.spring.Apple);if (fruit ! null) {fruit.eat();}} }6.BeanFactory 和 ApplicationContext有什么区别 BeanFactory和ApplicationContext是Spring的两大核心接口都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。 依赖关系 BeanFactory是Spring里面最底层的接口包含了各种Bean的定义读取bean配置文档管理bean的加载、实例化控制bean的生命周期维护bean之间的依赖关系。我们可以称之为 “低级容器”。 ApplicationContext接口作为BeanFactory的派生可以称之为 “高级容器”。除了提供BeanFactory所具有的功能外还提供了更完整的框架功能 继承MessageSource因此支持国际化。统一的资源文件访问方式。提供在监听器中注册bean的事件。同时加载多个配置文件。载入多个有继承关系上下文 使得每一个上下文都专注于一个特定的层次比如应用的web层。 加载方式 BeanFactroy采用的是延迟加载形式来注入Bean的即只有在使用到某个Bean时(调用getBean())才对该Bean进行加载实例化。这样我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入BeanFacotry加载后直至第一次使用调用getBean方法才会抛出异常。 ApplicationContext它是在容器启动时一次性创建了所有的Bean。这样在容器启动时我们就可以发现Spring中存在的配置错误这样有利于检查所依赖属性是否注入。ApplicationContext启动后预载入所有的单实例Bean通过预载入单实例bean确保当你需要的时候你就不用等待因为它们已经创建好了。 相对于基本的BeanFactoryApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时程序启动较慢。 创建方式 BeanFactory通常以编程的方式被创建ApplicationContext还能以声明的方式创建如使用ContextLoader。 注册方式 BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用但两者之间的区别是BeanFactory需要手动注册而ApplicationContext则是自动注册。 7.什么是Spring的依赖注入(Dependency Injection) 依赖注入相对于IoC而言依赖注入(DI)更加准确地描述了IoC的设计理念。所谓依赖注入Dependency Injection即组件之间的依赖关系由容器在应用系统运行期来决定也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。组件不做定位查询只提供普通的Java方法让容器去决定依赖关系。 依赖注入是时下最流行的IoC实现方式依赖注入分为接口注入Interface InjectionSetter方法注入Setter Injection和构造器注入Constructor Injection三种方式。其中接口注入由于在灵活性和易用性比较差现在从Spring4开始已被废弃。 构造器注入构造器注入是容器通过调用一个类的构造器来实现的该构造器有一系列参数每个参数都必须注入。 Setter方法注入Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后调用该bean的setter方法来实现的依赖注入。 8.什么是Spring AOP AOP(Aspect-Oriented Programming)一般称为面向切面编程作为面向对象的一种补充用于将那些与业务无关但却对多个对象产生影响的公共行为和逻辑抽取并封装为一个可重用的模块这个模块被命名为“切面”Aspect通过面向切面编程减少了系统中的重复代码降低了模块间的耦合度同时提高了系统的可维护性。常用于权限认证、日志、事务处理等。 9.Spring AOP 与 AspectJ AOP 有什么区别AOP 有哪些实现方式 AOP实现的关键在于代理模式AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ动态代理则以Spring AOP为代表。 1AspectJ是静态代理的增强所谓静态代理就是AOP框架会在编译阶段生成AOP代理类因此也称为编译时增强他会在编译阶段将AspectJ(切面)织入到Java字节码中运行的时候就是增强之后的AOP对象。 2Spring AOP使用的动态代理所谓的动态代理就是说AOP框架不会去修改字节码而是每次运行时在内存中临时为方法生成一个AOP对象这个AOP对象包含了目标对象的全部方法并且在特定的切点做了增强处理并回调原对象的方法。 10.解释一下Spring AOP里面的几个名词 Aspect切面给业务方法增加到功能。切面泛指交叉业务逻辑。常用的切面是通知Advice。实际就是对主业务逻辑的一种增强。JoinPoint连接点连接切面的业务方法。连接点指可以被切面织入的具体方法。通常业务接口中的方法均为连接点。Pointcut切入点切入点指声明的一个或多个连接点的集合。通过切入点指定一组方法。被标记为 final 的方法是不能作为连接点与切入点的。因为最终的是不能被修改的不能被增强的。Target目标对象目标对象指将要被增强的对象。即包含主业务逻辑的类的对象。Advice通知通知表示切面的执行时间Advice 也叫增强。换个角度来说通知定义了增强代码切入到目标代码的时间点是目标方法执行之前执行还是之后执行等。通知类型不同切入时间不同。 切入点定义切入的位置通知定义切入的时间。 11.Spring AOP中的通知有哪些类型 通知类型说明使用场景前置通知Before在目标方法被执行之前调用通知后置通知After无论如何都会在目标方法执行之后调用通知记录日志(方法已经调用但不一定成功)最终通知After-returning 无论目标方法是否抛出异常该增强均会被执行。记录日志(方法已经成功调用)异常通知After-throwing在目标方法抛出异常后调用通知异常处理环绕通知Around通知包裹了目标方法在目标方法调用之前和调用之后执行自定义的行为事务权限控制 12.Spring支持的几种bean的作用域 当定义一个bean在Spring里我们还能给这个bean声明一个作用域。它可以通过bean的scope属性来定义。 Spring框架支持以下五种bean的作用域 作用域描述singleton单例模式在spring IoC容器仅存在一个Bean实例默认值prototype原型模式每次从容器中获取Bean时都返回一个新的实例即每次调用getBean()时相当于执行newXxxBean()request每次HTTP请求都会创建一个新的Bean该作用域仅在基于web的Spring ApplicationContext环境下有效session同一个HTTP Session共享一个Bean不同Session使用不同的Bean该作用域仅在基于web的Spring ApplicationContext环境下有效global-session同一个全局的HTTP Session中共享一个Bean一般用于Portlet应用环境该作用域仅在基于web的Spring ApplicationContext环境下有效因为经常用到的就是前两种 singleton、prototype所以下面通过简单的代码案例演示一下。 首先演示当Spring Bean的作用域设置为 默认singleton 的情况。依次是实体类、Spring配置文件、测试方法。 package com.szh.spring;/*** */ public class Book {private String bookName;private String bookAuthor;public void setBookName(String bookName) {this.bookName bookName;}public void setBookAuthor(String bookAuthor) {this.bookAuthor bookAuthor;}Overridepublic String toString() {return Book{ bookName bookName \ , bookAuthor bookAuthor \ };} }?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean idbook classcom.szh.spring.Book scopesingletonproperty namebookName value盗墓笔记/property namebookAuthor value南派三叔//bean/beansTestpublic void testBook() {ApplicationContext context new ClassPathXmlApplicationContext(bean1.xml);Book book1 context.getBean(book,Book.class);Book book2 context.getBean(book,Book.class);System.out.println(book1);System.out.println(book2);System.out.println(book1 book2);}从上面的输出结果中可以看到在bean的作用域为 singleton 单例的情况下通过Spring IoC容器依次拿到的这两个对象是一样的也就是说此时容器中仅存在这一个beanBook。 下面再来演示 bean 作用域为prototype的情况。所有测试代码和上面的一样只是将配置文件中 标签中的 scope 属性修改为 prototype。 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean idbook classcom.szh.spring.Book scopeprototypeproperty namebookName value盗墓笔记/property namebookAuthor value南派三叔//bean/beans这个时候我们可以看到从容器中拿到的这两个对象就不一样了因为此时bean的作用域变成了 prototype 多实例情况也就是说容器中可以有多个Book实例。 关于 singleton 和 prototype 的区别 singleton 单实例prototype 多实例。设置 scope 值是 singleton 的时候加载 spring 配置文件时就会创建单实例对象。 设置 scope 值是 prototype 的时候不是在加载 spring 配置文件的时候创建 对象而是在调用getBean 方法时候创建多实例对象。 13.解释一下Spring中bean的生命周期 在传统的Java应用中bean的生命周期很简单。使用Java关键字new进行bean实例化然后该bean就可以使用了。一旦该bean不再被使用则由Java自动进行垃圾回收。相比之下Spring容器中的bean的生命周期就显得相对复杂多了。正确理解Spring bean的生命周期非常重要因为你或许要利用Spring提供的扩展点来自定义bean的创建过程。 下图展示了bean装载到Spring应用上下文中的一个典型的生命周期过程。 Spring对bean进行实例化 Spring将值和bean的引用注入到bean对应的属性中(set方法赋值、引用类型、构造器等等) 如果bean实现了BeanNameAware接口Spring将bean的ID传递给setBean-Name()方法 如果bean实现了BeanFactoryAware接口Spring将调用setBeanFactory()方法将BeanFactory容器实例传入 如果bean实现了ApplicationContextAware接口Spring将调用setApplicationContext()方法将bean所在的应用上下文的引用传入进来 如果bean实现了BeanPostProcessor接口Spring将调用它们的post-ProcessBeforeInitialization()方法 如果bean实现了InitializingBean接口Spring将调用它们的after-PropertiesSet()方法。类似地如果bean使用initmethod声明了初始化方法该方法也会被调用 此时bean已经准备就绪可以被应用程序使用了它们将一直驻留在应用上下文中直到该应用上下文被销毁 如果bean实现了DisposableBean接口Spring将调用它的destroy()接口方法。同样如果bean使用destroy-method声明了销毁方法该方法也会被调用。 下面简单演示一下Spring Bean的生命周期 package com.szh.spring.bean;/****/ public class Orders {private String name;public Orders() {System.out.println(第一步: 执行无参构造创建bean实例);}public void setName(String name) {this.name name;System.out.println(第二步: 调用set方法设置属性值);}//创建执行的初始化的方法public void initMethod() {System.out.println(第三步: 执行bean初始化的方法);}//创建执行的销毁的方法public void destroyMethod() {System.out.println(第五步: 执行bean销毁的方法);}}package com.szh.spring.bean;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;/****/ public class MyBeanPost implements BeanPostProcessor {Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println(在初始化之前执行的方法);return bean;}Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println(在初始化之后执行的方法);return bean;} }?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean idorders classcom.szh.spring.bean.Orders init-methodinitMethod destroy-methoddestroyMethodproperty namename value手机//bean!-- 配置后置处理器 --bean idmyBeanPost classcom.szh.spring.bean.MyBeanPost//beansTestpublic void testBean() { // ApplicationContext context // new ClassPathXmlApplicationContext(bean2.xml);ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(bean2.xml);Orders orders context.getBean(orders,Orders.class);System.out.println(第四步: 获取创建好的bean实例对象 --- orders);//手动让bean实例销毁context.close();}bean 生命周期有七步 通过无参构造创建 bean 实例为 bean 的属性设置值和对其他 bean 的引用调用 set 方法把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization实现了BeanPostProcessor接口调用 bean 的初始化的方法需要进行配置初始化的方法把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization实现了BeanPostProcessor接口bean 可以使用了对象获取到了当容器关闭时候调用 bean 的销毁的方法需要进行配置销毁的方法 14.Spring支持的事务管理类型 Spring事务实现方式有哪些你更倾向用哪种事务管理类型 Spring事务的本质其实就是数据库对事务的支持没有数据库的事务支持spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过bin log或者redo log实现的。 Spring支持两种类型的事务管理 编程式事务管理通过编程的方式管理事务灵活性好但是难维护。 声明式事务管理将业务代码和事务管理分离只需用注解和XML配置来管理事务。 大多数情况下选择声明式事务管理虽然比编程式事务管理少了一点灵活性最细粒度只能作用到方法级别无法做到像编程式事务那样可以作用到代码块级别但是声明式事务管理对应用代码的影响最小更符合一个无侵入的轻量级容器的思想具有更好的可维护性。 15.什么是Spring事务的传播行为 spring事务的传播行为说的是当多个事务同时存在的时候spring如何处理这些事务的行为。 PROPAGATION_REQUIRED如果当前没有事务就创建一个新事务如果当前存在事务就加入该事务该设置是最常用的设置。PROPAGATION_SUPPORTS支持当前事务如果当前存在事务就加入该事务如果当前不存在事务就以非事务执行。PROPAGATION_MANDATORY支持当前事务如果当前存在事务就加入该事务如果当前不存在事务就抛出异常。PROPAGATION_REQUIRES_NEW创建新事务无论当前存不存在事务都创建新事务。PROPAGATION_NOT_SUPPORTED以非事务方式执行如果当前存在事务就把当前事务挂起。PROPAGATION_NEVER以非事务方式执行如果当前存在事务则抛出异常。PROPAGATION_NESTED如果当前存在事务则在嵌套事务内执行。如果当前没有事务则按REQUIRED属性执行。 16.什么是Spring事务的隔离级别 spring 有五大隔离级别默认值为 ISOLATION_DEFAULT使用数据库的设置其他四个隔离级别和数据库的隔离级别一致 ISOLATION_DEFAULT用底层数据库的设置隔离级别MySQL默认的为ISOLATION_REPEATABLE_READ。ISOLATION_READ_UNCOMMITTED读未提交最低的隔离级别一个事务可以读取另一个事务更新但未提交的数据。会出现脏读、不可重复读、幻读ISOLATION_READ_COMMITTED读已提交一个事务提交后才能被其他事务读取到会出现不可重复读、幻读Oracle、SQL server 的默认级别ISOLATION_REPEATABLE_READ可重复读对同一字段的多次读取结果都是一致的除非数据被本身事务所修改会出现幻读MySQL 的默认级别ISOLATION_SERIALIZABLE可串行化最高的隔离级别可以防止脏读、不可重复读、幻读。
http://www.yutouwan.com/news/446981/

相关文章:

  • 做网站硬件超可爱做头像的网站
  • 东莞网站建设 餐饮网站建站视频教程
  • 江西网站制作公司网站备案信息核验单
  • 做公司网站视频seo自然排名关键词来源的优缺点
  • 关于集团官方网站内容建设的报告网红店的营销方式
  • 网站点击换图片的效果怎么做菏泽做网站建设找哪家
  • 企业网站建设方案服务作品集网站代码
  • 谷歌seo网站运营纯净系统基地
  • 东南亚网站建设市场嘉兴港区建设局网站
  • 网站建设公司论坛用vps建网站备案
  • h5手机网站源码下载修改wordpress模板
  • 景区网站建设要求wordpress中文主题免费下载
  • 开发公司名称推荐优化公司治理
  • 福清市建设局网站做个网站
  • 云网站 深圳珠海专业的免费建站
  • 从哪看出网站的建站公司网站建设计划图
  • 一个虚拟机怎么做两个网站北京网页游戏制作
  • 医疗网站建设及优化创意产品设计100例图片
  • 做韦恩图网站百度百科词条入口
  • 网站投票制作郑州网络推广哪家实力强
  • 中国城乡住房和城乡建设部网站首页莆田百度快照优化
  • 济南营销型网站建设公司dede网站后缀乱码
  • 关于网站建设的书籍上海材料网站建设
  • 樟树市城乡规划建设局网站建站一条龙的服务流程是怎么样的
  • wordpress主题dux 5.1太原百度快照优化排名
  • 直播网站做收入流水广州微信网站建设费用
  • cms网站网络地址图片南昌做网站的公司
  • 做推送网站成都手机端建站模板
  • 专门做网络推广的公司企业网站seo排名
  • 济南网站推广哪家好阿里云心选建站