什么是spring?

spring是一个开源框架,为简化企业级应用开发而生.Spring可以是使简单的javaBean实现以前只有EJB才能实现的功能.Spring是一个IOC和AOP容器框架.

Spring容器的主要核心是:

  控制反转:(IOC)传统的java开发模式中,当需要一个对象时,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象,而在spring开发模式中,spring容器使用了工厂模式为我们创建我们需要的对象,不需要我们自己创建了,直接调用spring提供的对象就可以了,这就是控制反转的思想.

  依赖注入(DI),spring使用javaBean对象的set方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置为所需要的值的过程,就是依赖注入的思想.

  面向切面编程(AOP),在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象.而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制.事务管理,记录日志等.公用曹勇的处理的过程就是面向切面编程的思想.AOP底层是动态代理,如果是接口采用JDK动态代理,如果是类则采用CGLIB方式实现动态代理.

Spring中的设计模式?

a.单例模式----spring中两种代理方法,若目标对象实现了若干接口,spring使用jdk的java.reflect.Proxy类代理.若没有兑现没有实现任何接口,spring使用CGLIB库生成目标类的子类.

  单例模式-----在spring的配置文件中设置bean默认为单例模式

b.模板方式模式-----从来解决代码重复的问题.

  比如:RestTemplate.JmsTemplate,JpaTemplate

c.前端控制器模式-----spring提供了前端控制器DispatherServlet来对请求进行分发.

d.视图帮助(viewhelper) ---spring提供了一系列的JSP标签,高效宏来帮助分散将分散的代码整合在视图中.

e依赖注入---贯穿与BeanFactoty/ApplicationContext接口的核心理念

f:工厂模式----在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用同一个接口来指向新的创建的对象,spring中使用beanFactory来创建对象的实例.

Spring的常用注解

  spring在2.5版本以后开始支持注解的方式来配置依赖注入.可以用注解的方式来代替xml中bean的描述.注解注入将会被容器在xm;注入之前被处理,所以后者会覆盖掉前者对于同一属性的处理结果.

  注解装配在spring中默认是关闭的,所以需要在spring的核心配置文件中配置一下才能使用基于注解的装配模式.配置方式如下:<context:annotation-config />

  常用的注解:

  @Controller    (注入服务)

  @Required:该注解应用与设值方法.

  @Autowired:该注解应用于有值设值方法,非设值方法,构造方法和变量

  @Qualifier:该注解和@Autowired搭配使用,用于消除特定bean自动装配的歧义

  

4.简单介绍一下SpringBean的生命周期?

bean定义:在配置文件里面使用<bean></bean>

bean初始化:有两种方式初始化:

  1.在配置文件中通过指定的init-method属性来完成

  2.实现org.springframwork.beans.factory.InitializingBean接口

bean调用:有三种方式可以得到bean实例,并进行调用

    

1.读取xml文件的方式,这种在初学入门的时候比较适用 。

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:tt.xml");

    ApplicationContext applicationContext = new FileSystemXmlApplicationContext("classpath:tt.xml");

  2.继承spring的Aware类,覆盖方法实现获取上下文,从上下文中获取。

  

    2.1.继承自抽象类ApplicationObjectSupport
    说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
    Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。

    2.2:继承自抽象类WebApplicationObjectSupport
    说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext

    2.3:实现接口ApplicationContextAware
     说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
    Spring初始化时,会通过该方法将ApplicationContext对象注入。

private static ApplicationContext applicationContext=null;

@Override

public void setApplicationContext(ApplicationContext applicationContext)

throws BeansException {

this.applicationContext = applicationContext;

}

  3.借助于spring提供的工具类,

    WebApplicationContextUtils.getWebApplicationContext(ServletContext) 需要传入Servletcontext ,

    通常从request中获取req.getSession().getServletContext()。适合于controller或者action中直接获取,但通常会直接@autoWire注入。

  4.适用工具类ContextLoader.getCurrentWebApplicationContext()。这种最简单,用起来最方便,不需要继承,不需要注入,直接使用静态代码。注意一点,在服务器启动时,Spring容器初始化时,不能使用,在应用启动后方可使用。

bean销毁:销毁有两种方式:

  一种是指定配置文件中的destory-method属性

  实现org.springframwork,bean.factory.DisposeableBean接口

spring的面试题的更多相关文章

  1. spring cloud 面试题总结

    前言,随着分布式的时代到来,现在微服务越来越火了,Spring Cloud已经成为一个面试必问的考点,下面我们就Cloud这一些列的组件来一个入门到面试的过程.开篇前,先让大家看几个常见的Spring ...

  2. 互联网大厂Java面试题集—Spring boot面试题(一)

    Spring Boot 需要独立的容器运行吗? 可以不需要,内置了 Tomcat/ Jetty 等容器.通过pom.xml中导入依赖: <!--spring-boot-starter-web:代 ...

  3. spring知识点(面试题)

    转自(参考):https://baijiahao.baidu.com/s?id=1595722523154435312&wfr=spider&for=pc 本人收集了一些在大家在面试时 ...

  4. Spring 常见面试题总结 | JavaGuide

    首发于 JavaGuide 在线网站:Spring 常见面试题总结 最近在对 JavaGuide 的内容进行重构完善,同步一下最新更新,希望能够帮助你. Spring 基础 什么是 Spring 框架 ...

  5. Spring Boot面试题

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...

  6. 吐血整理 20 道 Spring Boot 面试题,我经常拿来面试别人!

    面试了一些人,简历上都说自己熟悉 Spring Boot, 或者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让我对面试者大失所望. 下面,我给大家总结 ...

  7. 紧急整理了 20 道 Spring Boot 面试题,我经常拿来面试别人!

    面试了一些人,简历上都说自己熟悉 Spring Boot, 或者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让我对面试者大失所望. 下面,我给大家总结 ...

  8. 20 道 Spring Boot 面试题

    转自:微信公众号:Java技术栈(id: javastack) 面试了一些人,简历上都说自己熟悉 Spring Boot, 或者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段 ...

  9. 【转】20道Spring Boot面试题

    面试了少量人,简历上都说自己熟习 Spring Boot, 或者者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让我对面试者大失所望. 下面,我给大家总 ...

  10. 20道spring boot面试题

    面试了少量人,简历上都说自己熟习 Spring Boot, 或者者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让我对面试者大失所望. 下面,我给大家总 ...

随机推荐

  1. ThinkPHP3创建Model模型--对表的操作

    创建Model模型 把"Home/Model"文件夹剪切到Application文件夹下,让Home和Admin共同使用. 第一种实例化模型的方法 第二种实例化模型的方法 第三种实 ...

  2. git merge合并分支; already up to date 现象, merger算法

    https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA% ...

  3. python入门基础 03

    整型 -- 数字 (int) 用于比较和运算的 32位 -2 ** 31 -1 ~ 2 ** 31 -1 64位 -2 ** 63 -1 ~ 2 ** 63 -1 + - * / // ** % &q ...

  4. C基础 stack 设计

    前言 - stack 设计思路 先说说设计 stack 结构的原由. 以前我们再释放查找树的时候多数用递归的后续遍历去释放. 其内部隐含了运行时的函数栈, 有些语言中存在爆栈风险. 所以想运用显示栈来 ...

  5. loadbalance轮询算法 java实现

    /** * <html> * <body> * <P> Copyright JasonInternational</p> * <p> All ...

  6. (转)数据库_不懂数据库索引的底层原理?那是因为你心里没点BTree

    原文地址:https://www.cnblogs.com/sujing/p/11110292.html 要了解数据库索引的底层原理,我们就得先了解一种叫树的数据结构,而树中很经典的一种数据结构就是二叉 ...

  7. 全网最easy的better-scroll实现上拉加载和下拉刷新

    前言 移动端页面常见的一种效果:下拉刷新(pulldownrefresh)和上拉加载(pullupload),目的都是为了增强用户的体验效果,因此各种移动端滑动插件也是层出不穷,今天小编也在这里给大家 ...

  8. canvas实现酷炫气泡效果

    canvas实现动画主要是靠设置定时器(setinterval())和定时清除画布里的元素实现,canvas动画上手很简单,今天可以自己动手来实现一个酷炫气泡效果. 气泡炸裂效果(类似水面波纹) 代码 ...

  9. linux搭建stm32开发环境

    下载stm32固件库 创建目录 libs目录放stm32固件库,src放用户源码,inc放用户头文件 # mkdir libs src inc 复制文件 将STM32F10x_StdPeriph_Li ...

  10. kthread_run

    头文件 include/linux/kthread.h 创建并启动 /** * kthread_run - create and wake a thread. * @threadfn: the fun ...