1、什么是Spring框架?Spring框架有哪些主要模块?
spring是一个开源框架,让java开发模块化,并且全面。贯穿逻辑层,表现层,持久层。让每一个功能模块都可以独立分开,降低耦合,提高代码复用率!spring通过控制反转降低耦合性,一个对象的依赖通过被动注入的方式而非主动new还包括面向切面, mvc的整合等.
框架:让通用的流程规范化,繁琐的流程自动化.(通过注解,反射,字节码生成)
主要模块:
Spring Core: 提供ioc和依赖注入特性
Spring Context: 上下文,提供国际化的支持,事件传播,资源装载
Spring Dao:提供JDBC抽象层,声明式事务.
Spring ORM:对象关系型映射的集成层.
Spring Web:提供了基础的Web开发的集成特性.
Spring MVC:模型分离.
Spring AOP: 面向切面编程
2.谈谈你对Ioc/DI的理解
IoC 就是将原本在程序中手动创建对象的控制权,交由容器来管理,简单说,就是创建对象控制权被反转到了Spring框架
DI 是在容器负责创建Bean对象时,动态的将依赖对象注入到Bean组件
依赖注入的方式(bean的属性注入)
1.构造器注入 2.setter方法注入 3.xml
image.png
3.BeanFactory 接口和 ApplicationContext 接口有什么区别 ?
BeanFactory 可以理解为含有bean集合的工厂类。
①ApplicationContext 是BeanFactory的子接口,Spring核心工厂是BeanFactory(springioc具体实现) ,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean, ApplicationContext是会在加载配置文件时初始化Bean。
②ApplicationContext是对BeanFactory扩展,它可以进行国际化处理、事件传递和bean自动装配以及各种不同应用层的Context实现
开发中基本都在使用ApplicationContext, web项目使用WebApplicationContext ,很少用到BeanFactory
4.Spring的几种配置方式
1.基于XML的配置
2.基于注解的配置
3.基于Java的配置
5.介绍spring中bean的生命周期和作用域
- 定义: 通过<bean></bean>
- 初始化: 配置文件init-method属性,或InitializingBean回调接口
- bean的调用:
-
销毁: 配置文件destory-method,DisposeableBean接口
0930070.png
作用域
singleton(提供一个共享的实例)
prototype(每次提供一个新的bean实例)
request (每个http请求有各自的实例,在applicationcontext下)
session:
global-session:
- 单例bean没有实现线程安全的操作,但是大部分场景安全,因为大部分bean没有可变的状态.
读取Bean
//1.ClassPathXmlApplicationContext:从类路径中加载。
//2.FileSystemXmlApplicationContext:从文件系统加载。
//3.fatory.getbean
ApplicationContext ac=new ClassPathXmlApplicationContext("com/lc/collection/beans.xml");
Department department=(Department) ac.getBean("department");
6.如何在spring中注入一个集合
<list> : 该标签用来装配可重复的list值。
<set> : 该标签用来装配没有重复的set值。
<map>: 该标签可用来注入键和值可以为任何类型的键值对。
<props> : 该标签支持注入键和值都是字符串类型的键值对。
7.Spring中用到哪些设计模式
代理模式—在AOP和remoting中被用的比较多。
单例模式—在spring配置文件中定义的bean默认为单例模式。
工厂模式—BeanFactory用来创建对象的实例。
模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
前端控制器—Spring提供了DispatcherServlet来对请求进行分发。
视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。
依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。
8.Tomcat加载spring的流程
1.Tomcat会读取web.xml配置.(读<listener> <context-param>)
2.web.xml中负责启动spring和spring mvc.
3 orm框架启动通过sqlsessionFactory bean来启动的。并配置各种bean到ioc容器中。包括datasource等。
4.通过设置scan package的方式,spring在启动时候会扫描包下的所有注解,并将它们注册到ioc容器中。
9.Spring如何处理线程并发问题
Spring使用ThreadLocal解决线程安全问题
ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
10.Spring AOP的理解
AOP即面向切面编程,可以说是OOP的补充和完善。...
15.解释一下Spring AOP里面的几个名词
切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解(@AspectJ风格)来实现。
连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在Spring AOP中,一个连接点 总是 代表一个方法的执行。 通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。
通知(Advice):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。
切入点(Pointcut):匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。
引入(Introduction):(也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。 Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(advised) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
AOP代理(AOP Proxy): AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 注意:Spring 2.0最新引入的基于模式(schema-based)风格和@AspectJ注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。
织入(Weaving):把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。 这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。 Spring和其他纯Java AOP框架一样,在运行时完成织入。
b541ca1e-2fd9-4dff-9267-14d6e4c8f08516.通知有哪些类型?
前置通知(Before advice):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。
返回后通知(After returning advice):在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。 抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知。 后通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。 环绕通知(Around Advice):包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。 环绕通知是最常用的一种通知类型。大部分基于拦截的AOP框架,例如Nanning和JBoss4,都只提供环绕通知。 切入点(pointcut)和连接点(join point)匹配的概念是AOP的关键,这使得AOP不同于其它仅仅提供拦截功能的旧技术。 切入点使得定位通知(advice)可独立于OO层次。 例如,一个提供声明式事务管理的around通知可以被应用到一组横跨多个对象中的方法上(例如服务层的所有业务操作)。
网友评论