`

spring相关问题

阅读更多

什么是spring ?
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.
spring的设计思想是,单例模式和工厂模式


一、解释一下Dependency injection(DI依赖注入)和IOC(Inversion of control控制反转)?
当一个调用者需要被另一个调用者协助时,创建被调用者的工作不再由调用者来完成,称为控制反转。创建调用者实例的工作通常由spring容器来完成,然后注入调用者,称为依赖注入。


二、spring中的BeanFactory与ApplicationContext的作用有哪些
bean工厂作用:
(1) 创建对象实例
(2) 创建和管理对象之间的依赖
(3) 参与bean的生命周期管理,调用用户定义的初始化方法和销毁方法
ApplicationContext工厂作用: 
(1) 包括BeanFactory的所有功能
(2) 提供国际化的消息访问(getMessage) 
(3) 资源管理:可以直接读取一个文件的内容,例如URL 
(4)事件传播(事件处理),实现了ApplicationListener接口的bean
(5) 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层 web应用中自动加载ApplicationContext

三、如何在spring中实现国际化
写个中英文属性文件messageRsource_en_US.properties、messageRsource_zh_CN.properties
XML配置
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
            <list>
                <value>messageResource</value>
            </list>
        </property>
</bean>
后台获得:
ApplicationContext/MessageResource ctx = new
FileSystemXmlApplicationContext("demo.xml");
//加载上面的xml userName为资源文件里的key
ctx.getMessage("userName",new String[]{"dddd"},Locale.getDefault());
这个dddd  需要在资源文件里 配一下 通配符  userName=\u7528\u6237\u540d{0}

四、spring中的核心类有那些,各有什么作用?
BeanFactory:产生一个新的实例,可以实现单例模式 创建和管理对象之间的依赖
BeanWrapper:提供统一的get及set方法
ApplicationContext:提供框架的实现,包括BeanFactory的所有功能  国际化(getMessage) 资源管理

五、spring的组成部分
Spring 核心容器(Core):提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际的应用代码程序分开。
Spring AOP:通过配置管理特性,Spring AOP模块直接面向方面的编程功能集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何对象支持 AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖于EJB组件,就可以将声明性事务管理集成到应用程序中。
Spring ORM:Spring框架集成了若干ORM框架,从而提供了ORM的对象关系工具,其中包括 JDO、Hibernate、iBatis和TopLink。所有这些都遵从Spring的通用事务和DAO异常层结构。
Spring DAO:JDBC DAO抽象层提供了有意义的异常层次的结构,可用该结构来管理异常处理和不同数据供应商抛出的异常错误信息。异常层次结构简化了错误处理,并且大大的降低 了需要编写的异常代码数量(例如,打开和关系连接)。Spring DAO的面向JDBC的异常遵从通用的DAO异常层结构。
Spring WEB:Web上下文模块建立在上下文模块(Context)的基础之上,为基于Web服务的应用程序提供了上下文的服务。所以Spring框架支持 Jakarta Struts的集成。Web模块还简化了处理多部分请求及将请求参数绑定到域对象的工作
Spring上下文(Context):Spring上下文是一个配置文件,向Spring框架提供上下文信息。 Spring上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化校验和调度功能。
Spring MVC:Spring的MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳的大量视图技术,包括JSP、Velocity、Tiles、iText和Pol

六、spring 中bean的作用域
singleton
当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。
prototype
Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域
request
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用 域仅在基于web的Spring ApplicationContext情形下有效。
session
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring
ApplicationContext情形下有效。
global session
在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet
context的时候有效。该作用域仅在基于 web的Spring ApplicationContext情形下有效。

七、spring的四大特点
1、低侵入式设计,代码污染极低
2、独立于各种应用服务器,spring应用真正实现编写一次到处运行。
3、DI机制降低了替换业务对象的复杂性
4、高度开放性,并不强制完全依赖spring。贯穿表现层、业务层、持久层

八、什么是ioc容器
Org.springframework.beans包是SpringIoc容器的基础,org.springframework.beans.factory.BeanFactory接口是springIoc容器的实际代表者。Ioc容器负责容纳此前所描述的bean,并对bean进行管理。容器的工作就是创建bean时注入那些依赖关系。

Inversion of Control,是一种模式,处理类之间和接口之间或类与接口之间关联关系。控制反转意味着在系统开发过程中,设计的类将交由容器去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同,”不用你找,我来提供给你”,这就是控制反转的含义。

九、spring注入的2种方式
设值注入:设值注入是指通过setter方法传入被调用者的实例  这种注入方式简单、直观。
设值注入需要在指定注入的类(person)提供被注入属性的setter()和getter()方法,还需要提供一个无参的构造方法
优点: setter 方法可以自动生成,简单。
缺点: 组件使用者或许会忘记给组件注入它需要的依赖; 在第一次注入后,依赖可能会因为 setter 方法的调用而被修改。
构造注入:通过构造函数来完成依赖关系的设定  在构造期即创建一个完整、合法的对象
构造注入需要在指定注入的类(person)提供一个带参数的构造方法, 接收被注入的属性
优点:
1、解决了setter注入的缺点
2、构造注入可以再构造器中决定依赖关系的注入顺序,优先依赖的优先注入        
3、对于依赖关系无须变化的Bean,构造注入更有用处;因为没有setter方法,所有的依赖关系全部在构造器内设定,因此,不用担心后续代码对依赖关系的破坏
缺点: 需通过参数位置来确定参数; 若组件有多个依赖需要注入, 会导致构造器参数列表非常冗长。

十、spring创建实例的方式(如默认的, 静态工厂 工厂方法)
创建静态工厂方法:(xml配置)
<bean id="cat" class="包名.类名" factory-method="静态工厂的方法名">
<constructor-arg>
            <value>参数</value>
        </constructor-arg>
</bean>

创建非静态工厂方法(xml配置):
<bean id="factory" class="包名.类名"/>
<bean id="cat1" factory-bean="factory" factory-method="非静态工厂方法名">
<constructor-arg>
           <value>参数</value>
   </constructor-arg>
</bean>


十一、spring初始化回调方法以及销毁( 析构回调)方法配置
在bean里 配置 init-method="fun" 和 destroy-method
<!-- init-method 指定最先运行的方法  并且会自动运行-->
<bean id="person" class="com.lxit.Person" init-method="fun">


十二、IOC容器的实现类型
Spring 提供了两种类型的 IOC 容器实现.:BeanFactory: IOC 容器的基本实现,ApplicationContext: 提供了更多的高级特性. 是 BeanFactory 的子接口,无论使用何种方式, 配置文件时相同的。 ApplicationContext 只是一个接口, 需要实例化其实现类:ClassPathXmlApplicationContext: 从 classpath 下加载配置文件,FileSystemXmlApplicationContext: 从文件系统中加载配置文件,XmlWebApplicationContext: 只能用于 web 应用。最长使用的是ClassPathXmlApplicationContext这个实现类。调用 ApplicationContext 的 getBean() 方法可以获取IOC容器中的对象。

十三、spring框架中bean的生命周期
  (1)  bean定义
    在配置文件里面用<bean></bean>来进行定义。
  (2)  bean初始化
    有两种方式初始化:
A.在配置文件中通过指定init-method属性来完成
B.实现org.springframwork.beans.factory.InitializingBean接口
  (3)  bean调用
    有三种方式可以得到bean实例,并进行调用
  (4)  bean销毁
    销毁有两种方式
A.使用配置文件指定的destroy-method属性
B.实现org.springframwork.bean.factory.DisposeableBean接口

十四、Spring读取配置文件的方式
InputStream is = new FileInputStream("beans.xml");
InputStreamResource isr = new InputStreamResource(is);
BeanFactory beanFactory = new XmlBeanFactory(isr);

Spring给出一些BeanFactory的实现类,其中最为常用的是XmlBeanFactory。
1、通过文件系统
Resource res = new FileSystemResource("beans.xml");
XmlBeanFactory factory = new XmlBeanFactory(res);
2、通过类路径
ClassPathResource res = new ClassPathResource("beans.xml");
XmlBeanFactory factory = new XmlBeanFactory(res);
3、通过ApplicationContext加载
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] {"applicationContext.xml", "applicationContext-part2.xml"});
BeanFactory factory = (BeanFactory) appContext;

十五、  连接点,切入点,切面,方面,处理,代理,目标对象
连接点:
在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。
切入点:
匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。
切面:
一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用基于模式)或者基于@Aspect注解的方式来实现。
方面:
有了切面组成了方面:事务、日志、安全、权限
处理:

代理:
AOP框架创建的对象,用来实现切面契约(例如通知方法执行等等)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
目标对象(Target Object):
被一个或者多个切面所通知的对象。也被称做被通知(advised)对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。

十六、  spring中代理的两种方式
1、jdk动态代理--面向接口编程(默认)
2、cglib代理--面向具体类(实现)编程

十七、  事务的类型
1、JDBC事务控制的局限性在一个数据库连接内,但是其使用简单。
2、JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。
3、容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用

十八、  jdbc是如何支持事务
jdbc它是通过connection这个接口来支持事务的。
主要是setAutoCommit()和commit()以及rollback()方法。

十九、 spring事务的组成部分
事务主要是由:事务的传播行为,事务的隔离级别,事务的超时值,事务只读标志组成

二十、 说说一下spring事务支持的几个类
TransactionTemplate类(事务模板类)和PlatformTransactionManager(事务平台管理类)

二十一、 spring定义事务的几种方式
包括编程型事务的和声明型事务。
编程型:通过TransactionTemplate、PlatformTransactionManager这二个超级接口实现
声明型:就在配置文件中配置,主要配置三个部分:DataSource、TransactionManager和代理机制这三部分

二十二、 spring中事务代理的几个类
ProxyFactoryBean实现单个代理机制
BeanNameAutoProxyCreator实现动态代理机制

二十三、  -exception与+exception
-Exception指碰到异常强制回滚事务,+Exception事务回滚失效

二十四、 log4j日志的几种级别
fatal>error>warn>info>debug>off

二十五、 说说一下在我们项目中用aop加入日志的流程
1、首先定义一个类实现BeforeAdvice或AfterAdvice接口
2、配置这个类的bean
3、选择使用代理类BeanNamesAutoProxyCreate或ProxyFactoryBean来引入目标类和处理类
4、再配置一下log4j.properties资源文件
5、用前置通知来处理目标类。

二十六、 spring模板技术 ,他有什么好处
在bean定义中包含了大量的配置信息,其中包括容器相关的信息(比如初始化方法、静态工厂方法名等等)以及构造器参数和属性值。子bean定义就是从父bean定义继承配置数据的bean定义。它可以覆盖父bean的一些值,或者添加一些它需要的值。使用父/子bean定义的形式可以节省很多的输入工作。
好处:子类可以继承父类的一些属性,也可改变或增加属性,减少代码量, 使用bean模板技术可以节省很多的输入工作

二十七、 说说一下spring支持的通知有几种
(1).before advice(前置通知)实现MethodBeforeAdvice接口。
是在方法调用前调用,没有返回值,通常意外情况下,会继续运行下一步方法.记住的一点是没有返回值。
(2).after advice(后置通知)实现AfterReturningAdvice接口
是在方法调用后调用,有返回值,记住的一点是有返回值。
(3).around advice(环绕通知)实现MethodInterceptor接口
around是针对具体的某个切入点的方法,around的切入类型是就这个方法的内部调用,是通过java的元数据,在运行时通过Method.invoke来调用,具有返回值,当发生意外的时候会终止.记住的一点是有返回值。
(4).throws advice(异常通知)实现ThrowsAdvice接口
就在当程序有异常的时候进行通知,提供一些异常的信息
(5).introduce advice(引入通知)
引入通知是一种特殊的通知,它能将新的成员变量、成员方法引入到目标类中。它不能作用于任何切入点,因为它只作用于类层次,而不是方法层次。实现引入通知需要实现IntroductionAdvisor和IntroductionInterceptor接口。

二十八、 spring事务的原理(从架构图回答)
事务管理的方式:编程型和声明型,spring推荐使用后一种方式
声明型事务管理的优势非常明显:代码中无需关于关注事务逻辑,让Spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换。
声明式事务管理的配置方式,通常有如下三种:
1.使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。此方式是最传统,配置文件最臃肿、难以阅读的方式。
2.采用bean继承的事务代理配置方式,比较简洁,但依然是增量式配置。
3.使用BeanNameAutoProxyCreator,根据bean name自动生成事务代理的方式,这是直接利用Spring的AOP框架配置事务代理的方式,需要对Spring的AOP框架有所理解。但这种方式避免了增量式配置,效果非常不错。
4.DefaultAdvisorAutoProxyCreator:这也是直接利用Spring的AOP框架配置事务代理的方式,效果也非常不多,只是这种配置方式的可读性不如第三种方式。
编程式:围绕着两个核心PlatformTransactionManager和TransactionStatus
spring提供了几个关于事务处理的类:
TransactionDefinition //事务属性定义
TranscationStatus //代表了当前的事务,可以提交,回滚。
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。


二十九、 spring的后处理技术是干什么的
创建代理对象

三十、 spring事务的传播属性(7个,最好能说出3个)
1.PROPAGATION_MANDATORY:要求调用该方法的线程必须处于事务环境中,否则抛出异常。
2.PROPAGATION_NESTED:如果执行该方法的线程已处于事务环境下,依然启动新的事务,方法在嵌套的事务里执行。如果执行该方法的线程并未处于事务中,也启动新的事务,然后执行该方法,此时与PROPAGATION_REQUIRED相同。
3.PROPAGATION_NEVER:不允许调用该方法的线程处于事务环境下,如果调用该方法的线程处于事务环境下,则抛出异常。
4.PEOPAGATION_NOT_SUPPORTED:如果调用该方法的线程处于在事务中,则先暂停当前事务,然后执行该方法。
5.PEOPAGATION_REQUIRED:要求在事务环境中执行该方法,如果当前执行线程已处于事务中,则直接调用,如果当前执行线程不已处于事务中,则启动新的事务后执行该方法。
6.PEOPAGATION_REQUIRES_NEW:该方法要求有一个在新的事务环境中执行,如果当前执行线程已处于事务中,先暂停当前事务,启动新的事务后执行该方法;如果当前执行线程不已处于事务中,则启动新的事务后执行该方法
7.PEOPAGATION_SUPPORTS:如果当前执行线程已处于事务中,则使用当前事务,否则不使用事务。


三十一、 spting默认的事务隔离级别是什么?
isolation="READ_COMMITTED"

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    25个经典的Spring面试问题包含答案

    以上是Spring面试中常见的25个问题及其解答,涵盖了Spring的核心概念、核心模块以及与Spring相关的各种技术和实践。深入理解这些内容,将有助于在面试中脱颖而出,或者在日常开发中提升工作效率。

    25个最经典的Spring问题解答

    这是个人总结的25个最经典的Spring相关面试问题及一些解答!

    Spring 相关jar包

    5. **SPRING压缩包文件**:提到的"SPRING"可能包含Spring框架的所有必需jar包,如spring-context、spring-core、spring-aop、spring-webmvc等。这些jar包分别对应了Spring的各个模块,如IoC容器、核心工具、AOP支持...

    Spring相关的外文文献和翻译,spring论文参考文献,Java

    这篇文档“Spring相关的外文文献和翻译.doc”很可能包含了Spring框架的最新研究、最佳实践和深入分析。外文文献通常会提供原汁原味的技术细节,对于理解Spring的底层机制和设计理念非常有帮助。而中文译文则方便国内...

    Spring相关的外文文献和翻译.zip

    Spring相关的外文文献和翻译 英文文献和翻译 Spring框架:这是一个流行的开源应用框架,它可以解决很多问题。这里主要介绍Spring的基本概念,并详细介绍其中以“bean工厂”为核心的轻量级控制反转(IoC)容器。 ...

    跟我学spring3

    《跟我学Spring3》系列教程是为深入了解Spring框架的开发者准备的一份详尽指南...随着对Spring的理解不断加深,你将能够更好地应对企业面试中的Spring相关问题,提高自己的专业技能,从而在职业生涯中取得更大的成功。

    spring3.0.0相关jar包

    spring3.0.0相关jar包 org.springframework.aop-3.0.0.RELEASE org.springframework.asm-3.0.0.RELEASE org.springframework.aspects-3.0.0.RELEASE org.springframework.beans-3.0.0.RELEASE org.springframework....

    Spring相关jar包

    本主题将深入探讨Spring框架以及与之相关的jar包。 首先,我们来看`commons-logging-1.1.3-bin.zip`。Apache Commons Logging是Java的一个库,它为各种日志框架提供了一个统一的接口,比如Log4j、Java内置的日志API...

    spring相关jar包

    这个"spring相关jar包"包含了Spring框架的核心组件,这些组件使得开发人员能够构建可维护、松耦合的Java应用。下面将详细阐述Spring框架的主要组成部分及其重要知识点。 1. **IoC(Inversion of Control)容器**: ...

    spring3.2.4相关jar包

    java spring3.2.4 jar包 spring-aop-3.2.4.RELEASE spring-aspects-3.2.4.RELEASE spring-beans-3.2.4.RELEASE spring-build-src-3.2.4.RELEASE spring-context-3.2.4.RELEASE spring-context-support-3.2.4.RELEASE...

    Spring 相关依赖包

    这个压缩包"spring-framework-3.0.2.RELEASE-dependencies"中包含了Spring框架的核心组件和其他相关依赖,这些组件和依赖使得开发者能够更加方便地进行开发工作。 1. **Spring Core**: 这是Spring框架的基础,提供...

    Spring Boot整合Spring Batch,实现批处理

    1. **添加依赖**:在`build.gradle`或`pom.xml`文件中,添加Spring Boot的起步依赖和Spring Batch的相关依赖。 2. **配置数据库**:Spring Batch需要一个数据库来存储批处理作业的元数据,如作业状态、步骤状态等。...

    Spring有关资料 源码

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向...同时,文档则可能包含Spring的使用指南、最佳实践以及常见问题解答,是学习和解决问题的重要参考资料。

    spring boot 相关技术

    6. **微服务治理**:讨论服务治理的相关概念,如熔断、限流、降级策略,以及 Spring Cloud Gateway 和 Spring Cloud OpenFeign 的使用。 这些书籍将帮助读者全面理解 Spring Boot 技术,从基础到高级,从理论到实践...

    spring boot、spring cloud、spring boot Alibaba以及配套组件版本关系

    本文旨在帮助开发者理解Spring Boot、Spring Cloud、Spring Boot Alibaba以及其相关组件之间的版本关系,以便更好地选择适合自己项目的版本组合,避免因版本不匹配导致的问题。 #### 二、Spring Boot与Spring Cloud...

    spring相关jar包完整版.rar

    标题中的"spring相关jar包完整版.rar"指出这是一个包含多个Spring框架相关JAR文件的压缩包,日期为2018年4月19日。描述提到共有22个JAR包,适用于一般性的使用场景,暗示这是一套基本且全面的Spring框架库集合。 在...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringBoot+SpringSecurity处理Ajax登录请求问题 ...使用SpringBoot+SpringSecurity处理Ajax登录请求问题需要我们了解SpringBoot、SpringSecurity、MyBatis等技术框架,并掌握相关的配置和实现细节。

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    2. **配置Spring Security**:我们需要在Spring Cloud Gateway项目中引入Spring Security依赖,并配置相关的安全配置类。这包括定义认证和授权的规则,例如基于JWT(JSON Web Tokens)的认证,或者基于OAuth2的授权...

    spring依赖包,spring自行整合的市面上几乎和spring有关的jar包

    在描述中提到的“spring自行整合的市面上几乎和spring有关的jar包”,意味着这个压缩包包含了Spring生态系统中广泛使用的第三方库,使得开发者能够快速构建基于Spring的应用。 首先,`org.dom4j`是Java中用于处理...

    spring4.3.16相关jar包打包下载

    4. **spring-web-4.3.16.RELEASE.jar**:提供了与Web相关的功能,如Servlet API的封装、HTTP上传文件的支持、多部分解析器等。它是Spring MVC和其他Web集成的基础。 5. **spring-beans-4.3.16.RELEASE.jar**:负责...

Global site tag (gtag.js) - Google Analytics