`

面试总结----spring

    博客分类:
  • java
 
阅读更多

spring在面试中经常被问到,尤其是IOC与AOP.

 

我们在项目中经常用到spring的相关功能是IOC、AOP、事务管理、定时调度、spring security。

      1、IOC用于实现实例的动态注入,管理bean,从而在需要实例的时候不是主动new,而是从IOC容器中去取。利用java的反射机制来实现的。

      2、AOP是面向切面编程,主要涉及的概念有切点、切面、增强。以零侵入的形式织入增强逻辑。主要应用有声明式事务的管理、监控等。

           主要有java动态代理和cglib字节码增强两种方式实现。

                  a. java动态代理在生成对象的时候效率较高,但是被增强的类要实现接口,这里就是用到了代理模式,动态代理生成的接口实现类在运行的过程中实际上去调用代理类的方法。

                  b.cglib字节码增强的方式在方法调用的时候效率较高,但是cglib字节码增强技术在对目标类进行增强的时候是继承增强类的,在重写父类方法的时候进行了前后增强。

          因为在应用中方法调用的次数远高于生成对象的次数,因此,spring的AOP模式实现方式是利用cglib的形式实现的。实现接口和继承类都有各自的优缺点,java动态代理时(实现接口),被代理的类中的私有方法不能被增强,cglib字节码增强时(继承类),私有方法和final方法不能被增强。

     3、事务管理,应用的开发过程中,由于业务要求,都会引入事务,事务的ACID特性来保证业务的完整性与一致性。spring利用底层数据库事务的支持来实现事务管理。

     4、定时调度,用来实现定时任务,比如说,凌晨两点下载文件或者进行对账等操作,这就需要定时任务来实现,spring在这里封装了quartz来实现定时调度。

     5、spring security是用来进行权限认证,保证系统的安全性,理论原理是基于用户-角色-组的权限控制。我们可视化的功能就是用户登录功能的实现。还有就是某些页面只有某些人能看见。

 

上面大概讲述了面试中遇见的问题,如下问题在实际项目中经常遇见,一般关注度很小,但是意义很大。

    1、事务隔离级别与事务传播机制,spring中事务隔离级别有:read_uncommited、read_commited、repeatable_read、serializable,一般都是设置为read_commited,来防止脏读。这里提一下:数据库读写一般会产生五类问题:脏读、重复读、幻读、第一类更新丢失、第二类更新丢失。

    2、父子容器的关系,spring中常见的父容器有spring容器,子容器有spring mvc容器,因为父容器中的bean无法访问自容器中的bean,因此,在进行配置文件配置的时候,需要注意。一般讲service、dao配置在spring容器中,讲controller配置在spring mvc容器中,这样子容器中的controller就可以读取到父容器中的service和dao了。有时候如果将service配置在spring mvc容器中,会导致一些bean的注入失败,这问题的原因很难发现。

 

   下面讲解一下spring的配置:

   
                               

   1、applicationContext.xml是用来进行配置service、dao、数据源事务传播机制和隔离级别等内容的。

   2、dispatcher-servlet.xml用来进行spring mvc方面的配置的,比如说,controller扫描注入、视图解析、前后缀等的配置。

   3、web是用来指定spring配置文件和spring mvc配置文件,并制定启动顺序的。

        内容为:

        

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>
</web-app>

 ContextLoaderListener的功能就是监听web容器的启动和停止的,当监听到web容器启动时,就启动spring 容器;当监听到web容器停止时,就停止spring容器。当监听到web容器启东时,就根据如下配置:

 

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

 将spring配置加载进内存,根据applicationContext.xml的配置,加载bean及bean之间的依赖关系。

 

  spring mvc容器的配置如下:

  

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>

 DispatcherServlet用来转发请求和响应的,上述这样配置就指定了一个默认的配置文件dispatcher-servlet.xml来配置spring mvc的内容了,可以指定spring mvc的配置文件,如下:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>

 

spring的内容有很多,我知之甚少,《spring 3.x企业应用开发实战》这本书很好。我们共勉,共同学习。

 

 

 

  • 大小: 38.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics