什么是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. jQuery正则校验

    jQuery正则校验 银行卡号 //验证银行卡号,bankno为银行卡号function luhnCheck(){ var bankno = $.trim($("#bankNoInp&quo ...

  2. java中参数" ..."的用法和意思

    public static void executebindParam(PreparedStatement pstmt,Object ...os){ int len = os.length; try ...

  3. LeetCode 1253. 重构 2 行二进制矩阵 - Java - 统计

    题目链接:https://leetcode-cn.com/contest/weekly-contest-162/problems/reconstruct-a-2-row-binary-matrix/ ...

  4. 给自己看的Cache,三段代码

    此篇是我记录代码的一个草稿,不是一篇正式的博文,误点的别介意啊. 公司的框架中Cache实现文件: (1)CacheUtil.cs using System.Collections.Generic; ...

  5. ADO.net(内置类区别)随记

    Ado.net使用流程 SqlConnection->open->SqlCommand(sqlstring,conn)->(ExcuteNonQuery \ExecuteScalar ...

  6. 部署基于maven的springboot项目到linux服务器上

    目录 本地运行调试 导入数据库: 导入项目: 将项目打包: linux准备: 运行项目: 脚本运行 本地运行调试 导入数据库: 导入数据库的时候使用的是sqlYog导入navcat的脚本:由于两个应用 ...

  7. 2019三六零 java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.360等公司offer,岗位是Java后端开发,最终选择去了三六零. 面试了很多家公司,感觉大部分公司考察的点都差 ...

  8. 【转载】C#中Convert.ToInt32方法将字符串转换为Int32类型

    在C#编程过程中,可以使用Convert.ToInt32方法将字符串或者其他可转换为数字的对象变量转换为ToInt32类型,Convert.ToInt32方法有多个重载方法,最常使用的一个方法将字符串 ...

  9. 图片Image转换为base64编码的方法

    1.FileReader 通过XMLHttpRequest请求图片Blob数据格式,然后利用FileReader转换为dataURL function toDataURL(url, callback) ...

  10. old english diamaund钻石

    Diamond Di"a*mond (?; 277), n. [OE. diamaund, the hardest iron, steel, diamond, Gr. . Perh. the ...