Spring面试题

1.用两种方式根据部门号从高到底,工资从低到高列出每个员工的信息。

employee:

eid,ename,salary,deptid;

select * from employee order deptid desc,salary.

 

2.spring是什么?根据你的理解详细谈谈的你见解。

目的:解决企业应用开发的复杂性

功能:使用基本的javaBean代替EJB,并提供了更多的企业应用功能

范围:任何Java应用

简单来说,spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架。

轻量:从大小与开销两方面而言的Spring都是轻量的。完整的spring框架可以在一个大小只有1MB多的JAR文件里发布

并且spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的,典型的,spring应用中的对象不依赖于Spring的特定类。

控制反转 ——Spring通过一种称作控制反转(IOC)的技术促进了松耦合。当应用了ioc,一个对象依赖的其他对象通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。

不是对象从容器中查找依赖,而是容器在对象初始化不等对象就主动将依赖传递给它。

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(比如审计和事务管理)进行内聚性的开发。应用对象之只实现它们应该做的—完成业务逻辑而已。它们不负责其他系统级关注点,(比如 日志或事务支持)。

容器——Spring包含并管理应用对象 的配置和生命周期,在这个意义它是一种容器,你可以配置你的每个Bean 如何被创建——基于一个可配置原型,你的bean可以创建一个单独的事例或者每次需要时都生成一个新的实例。它们是如何相互关联的,然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大于笨重的。难以使用。

框架—— spring可以简单的组件配置,组合成复杂的应用。在sprig中,应用对象声明式的组和,典型的事在一个XML文件里。Spring也提供了很多基础功能(事务管理,持久化框架集成等)。

 

3.项目中如何体现spring中的切面编程?

面向切面编程:主要事横切一个关注点,将一个关注点模块化成一个切面,在切面上声明一个通知(advice)和切入点

(pointcut);通知、;是指切面在某个特定的连接点(代表一个方法的执行,通过声明一个org.aspectj.JoinPoint类型的参数可以使通知(advice)的主题部分获得连接点信息。)切入点的内容是一个表达式。

spring中的切面编程最多的地方,声明式事务管理。

a.定义一个事务管理器

b.配置事物特性 (声明通知。)

c.切入点。

 

4.spring的事物配置

spring的声明事务配置

1.<!--  配置sessionFactory-->

<bean id="sessionFactory"

class="org.springframework.orm.hibemate3.LocalSessionFactoryBean">

<property name="configLocation">

<value>/WEB-INF/calss/hibernate.cfg.xml</value>

</property>

</bean>

2.配置事物管理器

<bean id="transactionManger"

class="org.springframework.orm.hibemate3.HibemateTransactionManager">

<property name="sessionFactory">

<reflocal="sessionFactory"/>

</property>

</bean>

3.配置事物特性

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="add*" propagation="REQUIRED"/>

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="del*" propagation="REQUIRED"/>

<tx:method name="*" read-only="true"/>

</tx:attributes>

</tx:advice >

4.配置那些类的那些方法配置事物

<aop:config>

<aop:pointcut id=“allManagerMethod" ession="execution(*cn.happy.service.impl.*.*(..))"/>

<aop:advisor advisor advice-ref="txAdvice" pointcut-ref=“allManagerMethod">

</aop:config>                     

5个不同的事物隔离级别:

DEFAULT:默认的隔离级别

READ-COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务为提交嘚的数据。可能出现不可重复读和幻想读。

READ-UNCOMMITTED:这是事务最低的隔离级别。它允许另外一个事务可以看到这个事务未提交的数据。不可重复读和幻想读。

REPEATABLE-READ:这种事务级别可以防止脏读,不可重复。可能出现幻像读。它保证了一个事务不能读取另一个事务

未提交的数据外,还保证避免不了不可重复读。

SERIALIABLE:这是花费最高代价的但最可靠的事务隔离级别。事务被处理为顺序执行。防止脏读,不可重复读外

还避免了幻像读。

7个事物传播行为

REQUIRED:如果存在一个事务,则支持当前事务。如果没有则开启新的事务。

SUPPORTS:如果存在一个事务,支持当前事务。如果没有。则非事务的执行。

REQUIRES_NEW:总是开启一个新事务。如果一个已经存在,则将这个存在的挂起。

NOT_SUPPORTED :总是非事务的执行,并挂起任何存在的事务。

NEVER:总是非事物 地执,如果存在一个活动事务,则抛出异常。

NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按TranscationDefinition.PROPAFATION_REQUIRED属性执行。

嵌套事务就是内层事务依赖于外层事务,外层失败时,会回滚内层事务所做的动作。尔内层事务操作失败并不会引起外层事务的回滚。

REQUIRED:我们首先得事务传播行为。它能够满足我们大多数的事务需求。

posted @ 2017-08-28 12:25  易烊千鹿  阅读(138)  评论(0编辑  收藏  举报