SSM常见⾯试题
SSM常见⾯试题
1.spring bean 容器的⽣命周期是什么样的?
1. 实例化⼀个Bean--new;
2. 按照Spring上下⽂对实例化的Bean进⾏配置--IOC注⼊;
3. 如果这个Bean已经实现了BeanNameAware接⼝,会调⽤它实现的setBeanName(String)⽅法,传递Spring配置⽂件中Bean的id值。
4. 如果这个Bean已经实现了BeanFactoryAware接⼝,会调⽤它实现的setBeanFactory(setBeanFactory(BeanFactory)传递Spring⼯⼚⾃
⾝(可以⽤这个⽅式来获取其它Bean,只需在Spring配置⽂件中配置⼀个普通的Bean就可以);
5. 如果这个Bean已经实现了ApplicationContextAware接⼝,会调⽤setApplicationContext(ApplicationContext)⽅法,传⼊Spring上下⽂
(同样这个⽅式也可以实现步骤4的内容,但⽐4更好,因为ApplicationContext是BeanFactory的⼦接⼝,有更多的实现⽅法);
6. 如果这个Bean关联了BeanPostProcessor接⼝,将会调⽤postProcessBeforeInitialization(Object obj, String s)⽅
法,BeanPostProcessor经常被⽤作是Bean内容的更改,并且由于这个是在Bean初始化结束时调⽤那个的⽅法,也可以被应⽤于内存或缓存技术;
7. 如果Bean在Spring配置⽂件中配置了init-method属性会⾃动调⽤其配置的初始化⽅法。
8. 如果这个Bean关联了BeanPostProcessor接⼝,将会调⽤postProcessAfterInitialization(Object obj, String s)⽅法、;
注:以上⼯作完成以后就可以应⽤这个Bean了,那这个Bean是⼀个Singleton的,所以⼀般情况下我们调⽤同⼀个id的Bean会是在内容地址相同的实例。
9. 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接⼝,会调⽤其实现的destroy()⽅法;
10. 最后,如果这个Bean的Spring配置中配置了destroy-method属性,会⾃动调⽤其配置的销毁⽅法。
2.BeanFactory 和 ApplicationContext 的区别?
1. ApplicationContext是BeanFactory的⼦接⼝
spring ioc注解2. BeanFactory:bean⼯⼚接⼝;负责创建bean实例;容器⾥⾯保存的所有单例bean其实是⼀个map;Spring最底层的接⼝
3. ApplicationContext:是容器接⼝;更多负责容器功能的实现;(可以基于BeanFactory创建好的对象之上完成强⼤的容器)
4. BeanFactory是最底层的接⼝,ApplicationContext留给程序员使⽤的ioc容器接⼝;ApplicationContext是BeanFactory的⼦接⼝3.spring 的特性?谈谈你对 spring 的理解?spring ⽤来⼲嘛?
Spring框架是 Java 应⽤最⼴的框架,它的成功来源于理念,⽽不是技术本⾝,它的理念包括 IOC (Inversion of Control,控制反转)和 AOP(Aspect Oriented Programming,⾯向切⾯编程)。
优点:
1. 低侵⼊ / 低耦合 (降低组件之间的耦合度,实现软件各层之间的解耦)
2. 声明式事务管理(基于切⾯和惯例)
3. ⽅便集成其他框架(如MyBatis、Hibernate)
4. 降低 Java 开发难度
5. Spring 框架中包括了 J2EE 三层的每⼀层的解决⽅案(⼀站式)
Spring 能帮我们做什么?
①.Spring 能帮我们根据配置⽂件创建及组装对象之间的依赖关系。
②.Spring ⾯向切⾯编程能帮助我们⽆耦合的实现⽇志记录,性能统计,安全控制。
③.Spring 能⾮常简单的帮我们管理数据库事务。
④.Spring 还提供了与第三⽅数据访问框架(如Hibernate、JPA)⽆缝集成,⽽且⾃⼰也提供了⼀套JDBC访问模板来⽅便数据库访问。
⑤.Spring 还提供与第三⽅Web(如Struts1/2、JSF)框架⽆缝集成,⽽且⾃⼰也提供了⼀套Spring MVC框架,来⽅便web层搭建。
⑥.Spring 能⽅便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(⽐如缓存框架)。
4.jdk 的动态代理和 cglib 动态代理有什么区别?
1. jdk动态代理: JDK是基于反射机制,⽣成⼀个实现代理接⼝的匿名类,然后重写⽅法,实现⽅法的增强。它⽣成类的速度很快,但是
运⾏时因为是基于反射,调⽤后续的类操作会很慢。⽽且他是只能针对接⼝编程的。只能针对接⼝不能针对类实现代理。
2. cglib动态代理:CGLIB是基于继承机制,继承被代理类,所以⽅法不要声明为final,然后重写⽗类⽅法达到增强了类的作⽤。底层是
基于asm第三⽅框架,是对代理对象类的class⽂件加载进来,通过修改其字节码⽣成⼦类来处理。⽣成类的速度慢,但是后续执⾏类的操作时候很快,可以针对类和接⼝。
5.aop 的实现原理?
1. aop底层采⽤动态代理机制实现:接⼝+实现类
2. 接⼝:spring采⽤jdk的动态代理proxy
3. 实现类:spring采⽤cglib实现字节码增强
4. aop的横向机制原理:由代理创建出⼀个和impl实现类平级的⼀个对象,但是这个对象不是⼀个真正的对象,只是⼀个代理对象,但
它可以实现和impl相同的功能。
6.springmvc 的原理?springmvc 的⼯作流程?
SpringMVC的原理图:
SpringMVC⼯作流程?
1. ⽤户发送请求⾄前端控制器DispatcherServlet。
2. DispatcherServlet收到请求调⽤HandlerMapping处理器映射器。
3. 处理器映射器到具体的处理器(可以根据xml配置、注解进⾏查),⽣成处理器对象及处理器(如果有则⽣成)⼀并返回给
DispatcherServlet。
4. DispatcherServlet调⽤HandlerAdapter处理器适配器。
5. HandlerAdapter经过适配调⽤具体的处理器(Controller,也叫后端控制器)。
6. Controller执⾏完成返回ModelAndView。
7. HandlerAdapter将controller执⾏结果ModelAndView返回给DispatcherServlet。
8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9. ViewResolver解析后返回具体View。
10. DispatcherServlet根据View进⾏渲染视图(即将模型数据填充⾄视图中)
11. DispatcherServlet响应⽤户
7.springmvc 的常⽤注解有哪些?
1. 控制反转
@Component,标注为⼀个普通的bean
@Service
@Repository
2. 依赖注⼊
@Autowired
@Qulifier
@Resource
@Value
3. 全局配置
@Configuration,代替配置⽂件,相当于beans
@ComponentScan,配置扫描包
@Scope,配置bean的⽣命周期
1、建造者模式(Builder Pattern)
使⽤多个简单的对象⼀步⼀步构建成⼀个复杂的对象。它提供了⼀种创建对象的最佳⽅式。例
如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder等
XMLConfigBuilder :XML配置构建器,建造者模式,继承BaseBuilder
2、 简单⼯⼚模式(Simple Factory Pattern)
⼜称为静态⼯⼚⽅法(Static Factory Method)模式,它属于类创建型模式,专门定义⼀个类来负责创建其他类的实例,被创建的实例通常都具有共同的⽗类。如:
SqlSessionFactory:创建SqlSession对象。
ObjectFactory:对象⼯⼚:所有对象都要由⼯⼚来产⽣ 。
MapperProxyFactory:创建映射器代理 MapperProxy对象。
3、 单例模式(Singleton Pattern)
三个要点:
1. 某个类只能有⼀个实例;
2. 它必须⾃⾏创建这个实例;
3. 它必须⾃⾏向整个系统提供这个实例。单例模式是⼀种对象创建型模式。单例模式⼜名单件模式或单态模式。
如:ErrorContext和LogFactory
ErrorContext:⽤在每个线程范围内的单例,⽤于记录该线程的执⾏环境错误信息,
LogFactory:是提供给整个Mybatis使⽤的⽇志⼯⼚,⽤于获得针对项⽬配置好的⽇志对象。
4、代理模式(Proxy Pattern)
Mybatis核⼼使⽤的模式,给某⼀个对象提供⼀个代理,并由代理对象控制对原对象的引⽤。它是⼀种对象结构型模式。
如MapperProxy为绑定我们开发的Mapper和l创建代理类、Plugin为每个插件创建⼀个代理类等。
5、组合模式
组合多个对象形成树形结构以表⽰“整体-部分”的结构层次。
组合模式最关键的地⽅:叶⼦对象和组合对象实现相同的接⼝。
例如SqlNode和各个⼦类ChooseSqlNode等;
6、适配器模式(Adapter Pattern)
作为两个不兼容的接⼝之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独⽴接⼝的功能。
例如Log的Mybatis接⼝和它对jdbc、log4j等各种⽇志框架的适配实现
7、模板⽅法模式(Template Pattern)
是基于继承的代码复⽤的基本技术。模板⽅法模式中,⼀个抽象类公开定义了执⾏它的⽅法的⽅式/模板。它的⼦类可以按需要重写⽅法实现,但调⽤将以抽象类中定义的⽅式进⾏。这种类型的设计模式属于⾏为型模式。定义⼀个操作中的算法的⾻架,⽽将⼀些步骤延迟到⼦类中。模板⽅法使得⼦类可以不改变⼀个算法的结构即可重定义该算法的某些特定步骤。
例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的⼦类如IntegerTypeHandler;
8、装饰器模式(Decorator Pattern)
装饰器模式:允许向⼀个现有的对象添加新的功能,同时⼜不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的⼀个包装。这种模式创建了⼀个装饰类,⽤来包装原有的类,并在保持类⽅法签名完整性的前提下,提供了额外的功能。
例如Cache包中的cache.decorators⼦包中等各个装饰者的实现;
9、迭代器模式(Iterator)
⼜叫游标(Cursor)模式。GOF定义为:提供⼀种⽅法访问⼀个容器(container)对象中各个元素,⽽⼜不需暴露该对象的内部细节。
例如迭代器模式PropertyTokenizer;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论