1.解释一下Spring AOP里面的几个名词
(1)切面(Aspect):被抽取的公共模块,可能会横切多个对象。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @AspectJ 注解来实现。
(2)连接点(Join point):指方法,在Spring AOP中,一个连接点 总是 代表一个方法的执行。
(3)通知(Advice):在切面的某个特定的连接点(Join point)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。
(4)切入点(Pointcut):切入点是指 我们要对哪些Join point进行拦截的定义。通过切入点表达式,指定拦截的方法,比如指定拦截add*、search*。
(5)引入(Introduction):(也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
(6)目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(adviced) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
(7)织入(Weaving):指把增强应用到目标对象来创建新的代理对象的过程。Spring是在运行时完成织入。
2.有几种不同类型的自动处理
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
Metadata autoproxying
3.什么是织入,什么是织入应用的不同点
织入是将切面和到其他应用类型或对象连接或创建一个被通知对象的过程。
织入可以在编译时,加载时,或运行时完成。
4.Spring如何处理线程并发问题?
1)ThreadLocal为解决多线程bai程序的并发问题提供了一种新的思路
2)对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
5.Spring框架中有哪些不同类型的事件?
Spring 提供了以下5种标准的事件:
(1)上下文更新事件(ContextRefreshedEvent):在调用ConfigurableApplicationContext 接口中的refresh()方法时被触发。
(2)上下文开始事件(ContextStartedEvent):当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。
(3)上下文停止事件(ContextStoppedEvent):当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。
(4)上下文关闭事件(ContextClosedEvent):当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。
(5)请求处理事件(RequestHandledEvent):在Web应用中,当一个http请求(request)结束触发该事件。
6.Spring中的隔离级别
DEFAULT:使用数据库本身使用的隔离级别 ORACLE(读已提交) MySQL(可重复读)
READ_UNCOMITTED:读未提交(脏读)最低的隔离级别,一切皆有可能。
READ_COMMITED:读已提交,ORACLE默认隔离级别,有幻读以及不可重复读风险。
REPEATABLE_READ:可重复读,解决不可重复读的隔离级别,但还是有幻读风险。
SERIALIZABLE:串行化,最高隔离级别,杜绝一切隐患,缺点是效率低。
7.@Transactional(rollbackFor = Exception.class)注解了解吗?
@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚
8.@Component 和 @Bean 的区别是什么?
@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean.
@Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。
9.注解原理
注解就是继承自Annotation的接口,他没有行为只有数据,让其实现行为必须有实现对象(代理对象),在使用反射技术实现行为
注解就是一种标记,为他要标记的对象赋值,然后通过静态解析(继承AbstractProcessor),使用动态解析(反射机制)
jvm内部实现也是通过动态代理TestAnnotation然后通过反射赋值来实现的
10.什么是SpringMvc框架的控制器
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面du。Spring 框架提供了构建 Web 应用程序的全功zhi能 MVC 模块。使用 Spring 可插入的 MVC架构,从而在使dao用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架