面试题(三)


1.Spring的Bean被指定为Singleton以及Prototype有什么区别?

Spring创建的Bean有两种两种模式:单例模式(Singleton)和多例模式(Prototype)
在默认情况下是使用单例模式;
单例模式:指的是该bean在容器中只有一个,多次调用的结果都是一样的,
多例模式:在每次调用这个bean的时候就会创建一个一个实例对象

2.Spring的懒加载和非懒加载有什么区别?

Bean的加载方式:
非懒加载:指的是Spring容器启动的同时,就会创建bean的实例对象
懒加载:指的是在用户调用的时候,再去创建Bean的实例对象

3.Spring的依赖注入的方式有哪些?

  • 属性注入:属性注入又称Setter注入。在类中编写Setter方法,Spring就可以根据对象的可写属性(Setter方法)进行字段的赋值;
  • 构造器注入:在类中提供有参构造器,在注册bean的时候:
    a)根据参数类型注入
    b)根据参数的索引注入
    c) 联合使用
  • 工厂注入:静态工厂(常用)和非静态工厂(实际上也是使用属性注入)
    a)非静态工厂:需要将工厂先注册到IOC容器中,再使用工厂的方法为bean注入依赖
    b)静态工厂:使用指定的静态方法为bean注入依赖
  • 说到依赖注入就不得不提自动装配:什么是装配和自动装配呢?
    装配:创建应用对象之间协作关系的行为称为装配,也即是当一个bean A依赖于另一个bean B时,我们在实例化A时候,需要将B的实例交给A自动装配:根据类型或者id自动注入

4.哪些方法可以注册一个bean到容器中?

  • @Bean +@Configuration
  • @Controller @Service @Repository @Component +注解扫描
  • @Import 只能放置在类上,传入Class,通过反射注册到容器中
  • FactoryBean:

5.将一个类声明为Spring的bean的注解有哪些

@Controller @Service @Repository @Component

6.Spring的IOC启动原理

Spring的启动包括:容器的启动阶段 和 Bean的实例化阶段
容器的启动阶段:加载配置-》分析配置-》装配到BeanDefinition
Bean的实例化阶段:实例化Bean对象(反射)-》设置对象属性-》-》初始化(调用init-method)-》注册bean的销毁(destroty-method)

7.Spring是如何管理事务的?

事务的实现方式,有两种:1.编程式事务 2.声明式事务
1.编程式事务:使用try catch语句,没有异常就提交事务,有异常就回滚事务
2.声明式事务:有基于注解@Transactional方式 基于TransactionProxyFactoryBean 基于Aspectj的方式
3.Spring管理事务的时候,是通过动态代理实现的,我们在为某个方法声明了事务后,在执行方法的时候会触发一个拦截器,为该方法生成动态代理对象,执行方法,如果有异常就回滚,无异常就提交事务

8.Spring用到哪些设计模式?

1.简单工厂模式

2.工厂方法
3.单例模式
例子:我们在bean的作用域中有singleton=true 中有体现
4.适配器模式
例子:Spring的AOP实现就体现了适配器模式,在
5.包装器
例子:比如多数据源的
6.代理模式
例子:cglib
7.观察者模式
例子:监听器的实现 ApplicationListener
8.策略模式
例子:SimpleInstantiationStrategy;事务的策略模式
9.模板模式
例子:jdbctemplate

8.RequetMapping和GetMapping的区别

RequestMapping:会将所有的请求方式都映射到指定的处理方法
GetMapping:只会将GET请求映射到指定的方法上

9.SpringMVC如何设定重定向和请求转发

重定向:使用HttpSevletResponse对象的sendRedirect()
请求转发:使用HttpSevletRequest对象的getRequestDispatcher()获取到请求转发器,在执行forword()方法

10.SpringMVC如何时间参数进行格式化?有哪些方式?

1.DateTimeFormat 2…注册一个全局日期类型转化器
3.在controller中加入数据绑定代码:@InitBinder

11.SpringMVC常用的注解有哪些

1、@Controller
2、@RequestMapping
3、@Resource和@Autowired
4、@PathVariable
5、@CookieValue
6、@RequestParam
7、@SessionAttributes
8、@ModelAttribute
9、@ResponseBody 
10、@RequestBody