DW做的网站都能打开吗,网站换名称域名,手机网站布局技术,网站建设中html目录
一#xff0c;谈谈你对SpringIOC的理解
二#xff0c;Spring中有哪些依赖注入方式
三#xff0c;你用过哪些Spring注解
四#xff0c;SpringBean的作用域有几种
五#xff0c;Spring中的bean线程安全吗
六#xff0c;谈谈你对SpringAOP的理解
七#xff0c;…目录
一谈谈你对SpringIOC的理解
二Spring中有哪些依赖注入方式
三你用过哪些Spring注解
四SpringBean的作用域有几种
五Spring中的bean线程安全吗
六谈谈你对SpringAOP的理解
七AOP的代理有几种方式 一谈谈你对SpringIOC的理解 IOC也叫控制反转是Spring用来解耦的一种设计思想它的做法就是将对象的控制权由程序员手中反转到Spring手中。具体来说呢就是在没有IOC之前对象都是程序员在类中主动去创建需要哪个创建哪个有了IOC之后对象会交给Spring容器创建和管理如果哪个对象中需要其它对象属性Spring也会自动完成依赖注入。 总之一句话IOC可以将对象的创建和对象之间依赖关系的维护交给Spring自动完成。 二Spring中有哪些依赖注入方式 依赖注入指的是Spring给对象中属性进行赋值的过程主要包括两种方式 构造器依赖注入构造器注入是指容器调用一个类的构造器创建对象时直接传入给属性赋值 Setter方法注入Setter方法注入是指容器在创建对象完成后通过调用属性的Setter 方法可以属性赋值 三你用过哪些Spring注解 我们常用的Spring注解主要分类下面几大类 1、创建对象Component、Controller、Service、Repository 它们都可以标注在自己开发的类上Spring会使用注解标注的类创建出对象然后放入容器 2、依赖注入Autowired 标注在属性或者属性对应的set方法上Spring会根据被标注属性的类型自动对属性进行赋值 3、依赖注入Qualifier和Autowired 一块使用在同一类型的bean有多个的情况下Spring会根据name进行选择注入 4、配置类Configuration、Bean 主要标注在配置类中用于声明配置类和向Spring容器中放入一些配置有关的对象 5、当然还有一些平时用的不是特别多的 比如声明注解扫描的ComponentScan声明Bean的作用域的Scope用于切面编程的AroundPointcut等等 四SpringBean的作用域有几种 在Spring中作用域是用来对象的存活范围的它支持5种作用域 第一种是单例配置为单例的对象会跟随Spring容器创建而创建跟随Spring容器销毁而销毁在Spring容器中无论获取多少次单例对象得到的都是同一个这也是Spring中的对象的默认作用域 第二种是多例配置为多例的对象在每次获取的时候才会创建而且每次获取到的都不一样 还有三种分别是request、session和application目前已经基本不再使用 其实在我们平时的开发过程中对象基本上都是配为单例的这样可以有效的节省资源只有单例对象存在线程安全问题时才考虑调整为多例。 五Spring中的bean线程安全吗 Spring中的Bean主要分为单例和多例 多例对象每次获取都会创建新实例也就是说线程之间不存在Bean共享问题也就不存在线程安全问题 单例对象是所有线程共享一个实例因此就可能会存在线程安全问题。但是单例对象又分为无状态和有状态。 无状态Bean是指只对对象的成员变量进行查询操作不会修改成员变量的值因此不存在线程安全问题 有状态Bean需要对Bean中的成员变量进行数据更新操作因此就可能存在线程安全问题 所以最终我们得出结论在Spring中只有有状态的单例Bean才会存在线程安全问题 处理有状态单例Bean的线程安全问题有以下两种方法 将Bean的作用域由单例改为多例 将需要的可变成员变量保存在ThreadLocal中 ThreadLocal本身就具备线程隔离的特性这就相当于为每个线程提供了一个独立的变量副本每个线程只需要操作自己的线程副本变量从而解决线程安全问题。 六谈谈你对SpringAOP的理解 AOP又叫面向切面编程核心思想是将那些与业务无关却为业务模块所共同调用的逻辑例如事务处理、日志管理封装起来然后再动态插入到业务中的功能 使用AOP可以减少系统的重复代码降低模块间的耦合度并有利于扩展和维护Spring AOP是基于动态代理的它底层同时支持JDK和CGLIB的代理方式并且会根据被代理类是否有接口自动选择最合适的代理方式我们在开发中用到AOP的主要使用场景有事务管理、日志、性能监视、安全检查 七AOP的代理有几种方式 AOP思想的实现一般都是基于代理模式在Java中一般采用JDK动态代理模式和CGLIB动态代理模式 JDK动态代理模式只能对有接口的类进行代理而且效率较高 CGLIB可以对任意的类进行动态代理但是效率上不如JDK 因此在进行代理时如果被代理类有接口就用JDK如果没有接口就用CGLIB 使用Spring的AOP底层会自动按照这个规则进行选择开发者也无需关心