什么是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. javascript (0, obj.prop)()的用法

    我第一次看到这种奇怪的用法是在babel的源码中, 其实它的原理就是使得在prop这个方法里无法获取this, 从而无法对类中的其他变量或方法做操作. obj.prop() 这是一个方法调用, pro ...

  2. jquery+css 点赞喜欢特效

    百度盘链接 https://pan.baidu.com/s/1Nu8fiUrdffsNd6usTsUESg 密码 mps4 效果:

  3. Java集合框架(Java总结五)

    ”https://www.runoob.com/java/” 集合接口区别 List 接口存储一组不唯一,有序(插入顺序)的对象,允许有相同的元素. Set 接口存储一组唯一,无序的对象,不保存重复的 ...

  4. UML部署图

    部署图与组件图密切相关,部署图是用来描述软件组件部署的硬件组件:而组件图是用来描述组件和显示了它们是如何在硬件中部署. 部署图通常用来帮助理解分布式系统,一个系统模型只有一个部署图. 部署图用于可视化 ...

  5. 重置 Bootstrap modal 模态框数据

    利用 Bootstrap modal 模态框弹层添加或编辑数据,第二次弹出模态框时总是记住上一次的数据值,stackoverflow 上找到个比较好的方法,就是利用 jQuery 的 clone 方法 ...

  6. Go chan 结构体 写入文件

    chan 需要两个进程,一个写,一个读,是分开的, package main import ( "bufio" "fmt" "math/rand&qu ...

  7. golang 之文件操作

    文件操作要理解一切皆文件. Go 在 os 中提供了文件的基本操作,包括通常意义的打开.创建.读写等操作,除此以外为了追求便捷以及性能上,Go 还在 io/ioutil 以及 bufio 提供一些其他 ...

  8. oracle 数据库触发器,插入更新时间戳

    1.首先建立一个测试表 CREATE TABLE TestTragger( UserId int Primary Key, Name VARCHAR() Not Null, CreateTime Ti ...

  9. java之spring mvc之ajax

    1.可以使用servletAPI来实现 ajax Controller 类 @Controller public class AjaxController { @RequestMapping(&quo ...

  10. java之 代理设计模式

    1. 设计一个案例来实现租房功能.分析:在租房的过程中涉及到了3个对象,房东,中介,房客. 中介和房客具有相同的功能--租房. 可以设计如下: 2.上图的设计实际上就是一个代理设计模式---静态代理设 ...