面试题(三)
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依赖于另一个beanB
时,我们在实例化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