Java开发工程师最新面试题库系列——Spring部分(附答案)

语言: CN / TW / HK
Spring
  1. Spring框架是什么?

    答:Spring是轻量级的面向切面和控制反转的框架。初代版本为2002年发布的interface21,Spring框架是为了解决企业级应用开发的复杂性的出现的,它可以帮助开发人员管理对象之间的关系。能实现模块与模块之间、类与类之间的解耦合,Spring是一个大杂烩,它集成其他许多框架,使其他框架能与spring结合搭配使用

  2. Spring常用的注解有哪些?

    答:

    1、@Controller

    在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务bai处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。
    @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式:
    (1)在SpringMVC 的配置文件中定义MyController 的bean 对象。
    (2)在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。

    2、@RequestMapping

    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
    3、@Resource和@Autowired
    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

    4、@ModelAttribute和 @SessionAttributes

    代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
    @SessionAttributes即将值放到session作用域中,写在class上面。
    具体示例参见下面:使用 @ModelAttribute 和 @SessionAttributes 传递和保存数据

    5、@PathVariable

    用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。

    6、@requestParam

    @requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

    7、@ResponseBody

    作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
    使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、

    8、@Component

    相当于通用的注解,当不知道一些类归到哪个层时使用,如果有WEB开发架构中固定的层则使用更加语义化的注解@Repository注解于DAO层、@Service注解于Service层、@Controller 注解于Controller层

  3. Spring框架有哪些好处?

    答:Spring能有效地组织你的中间层对象,为模块之间降低耦合。还包括轻量级,面向切面,控制反转,都是Spring的好处

  4. Spring由哪些主要模块组成?

    答:

    img

  5. Spring IOC容器是什么?

    答:IOC容器意味着将对象交给IOC容器接管,由这样一个容器帮助我们管理对象,而不是传统的由开发人员管理对象。IOC可以帮助我们注入属性给对象,需要的时候给我们。

  6. Spring IOC有哪些好处?

    答:降低模块与模块之间的耦合,降低类与类之间的耦合。让开发人员不再做重复的对象创建赋值等繁琐的操作,而是需要用到时由IOC容器创建好自己传递过来

  7. BeanFactory和ApplicationContext有什么区别?

    答:

    BeanFactory:

    是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;

    ApplicationContext:

    应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;

    1. 国际化(MessageSource)

    2. 访问资源,如URL和文件(ResourceLoader)

    3. 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层

    4. 消息发送、响应机制(ApplicationEventPublisher)

    5. AOP(拦截器)

    两者装载bean的区别

    BeanFactory:

    BeanFactory在启动的时候不会去实例化Bean,中有从容器中拿Bean的时候才会去实例化;

    ApplicationContext:

    ApplicationContext在启动的时候就把所有的Bean全部实例化了。它还可以为Bean配置lazy-init=true来让Bean延迟实例化;

    我们该用BeanFactory还是ApplicationContext

    延迟实例化的优点:(BeanFactory

    应用启动的时候占用资源很少;对资源要求较高的应用,比较有优势;

    不延迟实例化的优点: (ApplicationContext

    1. 所有的Bean在启动的时候都加载,系统运行的速度快;

    2. 在启动的时候所有的Bean都加载了,我们就能在系统启动的时候,尽早的发现系统中的配置问题

    3. 建议web应用,在启动的时候就把所有的Bean都加载了。(把费时的操作放到系统启动中完成)

  8. Spring的依赖注入是什么?

    答:主动寻找依赖属性,通过set方法或者构造函数等方式注入到对象内部。

  9. Spring的依赖注入有几种方式?

    答:构造器注入,setter注入,接口注入

    依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参
    数就是要注入的对象。
    优点:
    接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可。
    缺点:
    侵入行太强,不建议使用。

  10. Spring Bean支持哪几种作用域?

    答:singlet单例,prototype多例,request HTTP请求,session会话,session-global全局会话

  11. Spring Bean生命周期是怎样的?

    答:

    imgimg

    Spring Bean生命周期

  12. Spring Bean为什么默认是单例的?

    答:

    1、如果是多例会参数较大的性能消耗,体现在创建对象,回收对象的过程。

    2、单例的话自始至终都.........

分享到: