1. @Component, @Controller, @Repository, @Service 有何区别?

@Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。

@Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。

@Service:此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用 @Service 而不是 @Component,因为它以更好的方式指定了意图。

@Repository:这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。


2. @Required 注解有什么作用

这个注解表明 bean 的属性必须在配置的时候设置,通过一个 bean 定义的显式的属性值或通过自动装配,若 @Required 注解的 bean 属性未被设置,容器将抛出 BeanInitializationException;

1    public class Employee {

2   private String name;

3   @Required
4   public void setName(String name){
5     this.name=name;
6   }

7   public string getName(){
8     return name;
9   }
10 }

3. @Autowired和@Resource之间的区别

@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。

@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。


4. @Qualifier 注解有什么作用

创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,可以使用 @Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义;

注意:@Qualifier 和 @Autowired 需要同时使用;


5. Spring支持的事务管理类型, spring 事务实现方式有哪些?

1、声明式事务,也就是使用 @Transactional 注解来实现;

2、编程式事务,使用 AOP 面向切面编程来实现事务;


6. Spring事务的实现方式和实现原理

spring 实现事务代码的方式有两种,声明式事务和编程式事务;
 
首先,spring 的事务是依赖于数据库的事务实现的,spring 本身是没有事务功能的;
 
然后,spring 的声明式事务也就是 @Transaction 注解,实现原理就是 spring aop;
 
通常来说,使用 aop 我们能够想到的是,前置通知中开启事务,返回通知中关闭事务,异常事务中回滚事务;
 
但实际上,spring aop 中并不是这么做的,而是使用 TransactionInterceptor 来实现的;
 
1、做准备工作,解析 @Transaction 注解上的相关属性,根据具体的属性来判断是否开启新事物;
 
2、获取数据库连接,关闭自动 commit 功能,开启事务;
 
3、执行 aop 代理的方法,也就是执行 sql 方法;
 
4、如果操作失败了,获取数据库连接对象,通过连接对象来执行回滚操作;
 
5、如果执行成功了,获取数据库连接对象,执行 commit 操作;

7. 说一下Spring的事务传播行为

传播特性共有 7 种;
 
事务的传播特性指的是不同方法的嵌套调用过程中,事务应该如何进行处理,是用同一个事务,还是使用不同事务;
 
当其中一个方法出现了异常,这两个方法的事务是提交还是回滚,也就是两个不同事务传播的方法之间的影响;
 
一般 7 中传播特性中常用的是 3 种:支持当前事务,不支持当前事务,嵌套事务;
 
支持当前事务:如果外层方法有事务,加入到该事务当中,不开启新事物;
 
不支持当前事务:如果外层方法有事务,不加入该事务当中,也不开启新事务;
 
嵌套事务:不管外层方法有没有事务,都开启当前方法的新事务;
 
一般情况下的判断
 
内外层方法是不是同一个事务:
 
如果是,出现异常统一由外层方法处理;
 
如果不是,内层方法有可能影响外层方法,外层方法不会影响内层方法;

8. 说一下 spring 的事务隔离?

spring 有五大隔离级别,默认值为 ISOLATION_DEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致;

1. ISOLATION_DEFAULT:用底层数据库的设置隔离级别,数据库设置的是什么我就用什么;

2. ISOLATION_READ_UNCOMMITTED:未提交读,最低隔离级别、事务未提交前,就可被其他事务读取(会出现幻读、脏读、不可重复读);

3. ISOLATION_READ_COMMITTED:提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读),SQL server 的默认级别;

4. ISOLATION_REPEATABLE_READ:可重复读,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读),MySQL 的默认级别;

5. ISOLATION_SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不可重复读、幻读。


9. Spring的AOP的底层实现原理

首先,aop 是 ioc 的一个扩展功能,就是一个 BeanPostProcessor,当 bean 初始化完毕后,执行 BeanPostProcessor 后置处理方法时实现了 AOP 功能;
 
1、代理对象的创建过程(advice,切面,切点);
 
2、通过 jdk 或者 cglib 的方式生成代理对象;
 
3、在执行方法调用的时候,会调用到生成的字节码文件中,直接找回到 DynamicAdvisoredInterceptor 类的 intercept 方法,从此方法开始执行;
 
4、根据之前定义好的通知来生成拦截器链;
 
5、执行拦截器链中的每一个通知;
 

Spring 常见问题 - 2的更多相关文章

  1. Spring常见问题总结

    1. 什么是 Spring 框架? Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性.Spring 官网:https://spring.io/. 我们一般说 Sprin ...

  2. spring常见问题

    问题1:提示说:cvc-elt.1: Cannot find the declaration of element 'beans' 解决方法:从网上搜了一些,有的说是因为网络原因访问不到xsd文件,因 ...

  3. 【面试】【Spring常见问题总结】【09】

    81.SimpleJdbcTemplate SimpleJdbcTemplate类也是基于JdbcTemplate类,但利用Java5+的可变參数列表和自己主动装箱和拆箱从而获取更简洁的代码. Sim ...

  4. 【专访】【Spring常见问题汇总】【05】

    种: 传播行为:传播行为定义了client与彼调用方法之间的事务边界. 隔离级别:隔离级别定义了一个事务可能受其它并发事务影响的程度. 仅仅读:表明事务是否是仅仅读的. 事务超时:指定事务执行的最长时 ...

  5. Struts+Hibernate+Spring常见问题

    http://wanglihu.iteye.com/blog/1897718 1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisi ...

  6. 【面试】【Spring常见问题总结】【07】

    [常见面试问题总结文件夹>>>] 61.Spring IoC容器的依赖有两层含义: Bean依赖容器:也就是说Bean要依赖于容器,这里的依赖是指容器负责创建Bean并管理Bean的 ...

  7. Spring常见问题大全

    Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring ...

  8. Spring常见问题(五)

    1.静态资源访问配置 绝对路径:访问静态资源. <mvc:resources location="/js/" mapping="/js/**">&l ...

  9. Spring常见问题-通配符的匹配很全面, 但无法找到元素 'aop:aspectj-autoproxy' 的声明

  10. [Spring常见问题]java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    这个问题是因为部署在tomcat下的项目中没有springweb包 但是问题来了,但是我的项目中有呀,maven都引了呀,然后我就懵B啦!看到这个博客我就豁然开朗了:http://my.oschina ...

随机推荐

  1. HDLbits——Rotate100

    verilog代码: // Build a 100-bit left/right rotator, with synchronous load and left/right enable. //A r ...

  2. Consul 服务注册与发现

    Consul是一种分布式,高度可用且具有数据中心感知能力的解决方案,用于跨动态,分布式基础架构连接和配置应用程序. 1.下载consul.exe 2.在consul.exe文件夹地址栏输入cmd 3. ...

  3. 在Ubuntu19.04系统中安装Emacs遇到的问题

    安装显示部分依赖软件包现在无法安装 发现emacs26无法安装 后来查阅资料,发现在Ubuntu18版本及以上就不需要更新了 即不需要以下操作: sudo apt update 同时安装也需要将ema ...

  4. mysql建表常用关键字

    DISTRIBUTE BY HASH(`id`) INDEX_ALL='Y' STORAGE_POLICY='HOT'

  5. laravel 软删除的使用

    1.模型层 引用类use Illuminate\Database\Eloquent\SoftDeletes;class类中引用软删除use SoftDeletes;然后执行正常的删除,列表已经不显示, ...

  6. (面试题)面试官为啥总是让我们手撕call、apply、bind?

    引言 上一篇关于<面试官为啥总是喜欢问前端路由实现方式>的文章发布后,发现还是挺受欢迎的.这就给我造成了一定的困惑 之前花了很长时间,实现了一个自认为创意还不错的关于前端如何利用node+ ...

  7. XML报文解析

    /** * XML报文解析 * @param docStr */ private Map<String, Object> analysisXmlStr(String xmlStr) { t ...

  8. git当前分支修改文件不提交切换另一个分支(git stash)

    出发前先讲故事:项目正在test分支更新版本我们疯狂的写bug,突然没更新前的版本出bug了(意料之中),此时呢我们要切换到master分支去改bug.此时此刻我test分支上修改的文件还不想提交,但 ...

  9. Linux基础第十章:系统安全及应用

    目录 一.账户安全措施 1.账户管理 2.锁定配置文件 3.清除历史记录 二.sudo 1.sudo概念及优点 2.使用sudo 3.sudo实操演示 4.设置sudo别名 5.sudo特别注意 一. ...

  10. 杭电OJ--1003题C++实现

    #include<iostream>using namespace std;int a[100000];void solve(int k,int n,int t);int main(){  ...