• Spring||Interview


    1.依赖注入(DI)(IOC)

      

       对象本身不负责对象的创建和维护,将控制权转交给外部的容器实现,降低程序的耦合度,只提供java方法让容器决定依赖关系,依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象,使用<bean>元素去构造组件时,为id定义一个唯一的名称,通过调用属性的setter方法实现。

      以多种方式实现依赖注入,分为构造注入,p命名注入;

     构造注入

        在applicationContext.xml中使用<constructor-arg> 去定义DAO实现,使用时不分顺序,由index属性指定该位置的索引,提供type属性去区分字符串和基本数据类型的混淆.

     P命名注入

        P:PropertyName="Variable"

      注入数据类型<value/>注入空字符串,<null/>=>null

    2.增强类型

      异常抛出增强

    public static  ErrorLogger implements ThrowsAdvice{
        
         void affterThrowing(Method method,Object[]args,Object target,SQLException ex);
    
         void afterThrowing(SQLException ex);
    
        
          void afterThrowing(RunntimeException ex);
    }    

      环绕增强

              在目标方法前后可以织入增强,其根本就是加强控制权的转交.

    public class AroundLogger implements MethodInterceptor{
    
    
     @Override 
       Object Invoke(MethodInvocation arg0){
        ...
    try{
          arg0.proceed();
       }catch(Throwable e){
          ...
    }
    }
    }

    注解定义增强

     spring通过@AcpectJ实现注解增强,在AspectJ5新增的功能,

    @Aspect
    public class BizLogger{
         @Before("execution(* biz.Biz.*(..))") 
      void before(){
       }
    
    @AfterReturning("execution(* biz.Biz.*(..))")
     void afterRuterning(){
        ...
    }       
    }

      @Before将before定义为前置增强,@AfterReturning将afterReturning()定义为后置增强

    同时需要在applicationContext.xml定义配置文件

    <aop:aspectj-autoproxy/>
    <bean class="Class"/>

    也可以通过注解定义环绕增强

    @Aspect
    class AroundLogger{
    
    @Around("execution(..)")
    Object aroundLogger(ProceedingJoinPoint jp){
     try{
        Object result= jp.procees();
    }catch(Throwable ex){
    
    }
    }
    }

    3.SessionFactory

      通过定义class为org.springframework.orm.hibernate3.LocalSessionFactoryBean指定文件位置后需要为对象提供关系映射文件

      

    <property name="mappingDirectoryLocations">
      <list>
       <value>classpath:PATH</values>
    </list>
    </property>

    在对DAO业务开发时提供HIbernateTemplate接口进行开发

    public class DaoImpl extends HibernateDaosupport implements Dao{
       
       void Update(object entity);
    
      void delete(Object entity);
    
      Object  getClass(Class entityClass,Serializable id);
    
      void saveOrUpdate(Object entity);
    
    }

    4.事务处理

     在硬编码中容易产生复杂,spring提供事务处理进行代码与业务分离,降低开发和维护难度通过配置tx和aop进行事务处理操作

    通过在bean标签中定义<tx:advice id="" transaction-manager="">定义事务标签,可通过<tx:attributes>进行标签定制事务属性,具有以下标签

      propagation:事务传播

    •     REQUIRED:默认值,如果存在一个事务,则支持当前事务,如果没有创建一个
    •                 SUPPORT:如果存在支持当前事务,如果没有按非事务方式执行
    •                MANDATORY:存在支持,没有抛出异常
    •                REQUIRES_NEW 总是开启一个事务,存在挂起,没有新事务执行
    •             NOT_SUPPORTED 非事务执行,存在挂起
    •                NEVER:非事务执行
    •               NESTED:不再在当前活动事务,则创建嵌套事务

      isolation:事务隔离级别默认为DEFAULT

         read-only:事务是否只读

         rollback-for:设置回滚异常

        no-rollback-for:设置不回滚异常类型

    5.web.xml

        ContextLoaderListener

     Spring需要提供监听服务来控制容器在web.xml进行创建

    <context-param>
        <param-name>contextConfigLocation</param-name>
       <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    
    <!-- add listener service -->
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener-class> 
    </listener>

     OpenSessionInViewFilter

        作用把Hibernate Session和一次完整的请求过程绑定,保证在一次请求过程中始终保持一个Session在开启,解决了延迟加载等问题

     <fillter>
      <filter-name>OpenSessionInViewFilter</filter-name>
       <filter-class>
         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>OpenSessionInViewFilter</filter-name> 
        <url-pattern>/*</url-pattern>
    
    </filter-mapping>
    <!-- 需要在struts StrutsPrepareAndExecuteFilter前面,否则无法发挥作用-->

    6.Bean Scope

      除了可以对bean进行注入,也可以指定作用域,决定spring的组建策略,影响程序的运行效率和数据安全主要分为5种

    Snigleton :默认值,以单例创建实例,保证实例只有一个,为gc减轻负担

    prototype: 每次从容器获取bean时,创建一个实例

    request :for Web,针对HTTP请求会创建一个实例

    session:web同一个会话共享一个实例,不同的会话使用不同的实例

    global Session:仅在Portlet的WEB,同一个全局共享一个实例.

    7.JNDI

      spring提供饮用JNDI资源的JndiObject'FactoryBean类

    <Context>
      <Resource name="jdbc/jboa" auth="Container"
             type="javax.sql.DataSource"
             driverClassName="..."
             user-"" password=""
    </Context>
    
    <!--DataSource -->
    class="org.springframework.jndi.JndiObjectFactoryBean">

    8.注解SessionFactory

      通过定义annotationsessionfactorybean配置注解,是LocalSessionFactoryBean子类,需要进行一下配置

    <bean id="sessionFactory"
       class="org.springframework.orm.hibernate3.annotation,AnnotationSessionFactoryBean"
    >
    
    <!-- Annotation PO-->
    <property name="annotatedClasses">
    
    <!--loading po class to Scan -->
    
    <property name="packagesToScan" value="Entity"/>

    9.自动装配

       在需要过多的配置量时,可通过自动装配实现autowire进行自动装配,可以配置以下属性

    no   不使用自动配置

    byType  根据属性自动装配,如果有一个依赖属性类型则自动装配,如果有多个则抛出一场,如果没有匹配bean,属性不会被设置

    byName  根据属性名进行配置,找出id与属性的setter方法匹配的bean,找到自动注入

    constructor:应用于构造起参数,如果没有找到一致的Bean,则抛出异常.

    通过使用default-autoWire进行减少维护注入方式

    10.依赖检查

     可以使用依赖检查来保证Bean属性正确的设置,通过<dependeny-check>或者default-dependency-check进行设置全局依赖检查.具有相关一下属性

    none:不进行依赖检查

    obejcts:检查BeanFactory中其他Bean的依赖

    sunple 检查原始

    all:同时检查

    11.注解定义Bean

     利用@Component进行映射配置

     @Repository 用于标注DAO类

    @Service 用于标注业务类

    @Controller 用于标注控制器

    @Qualifier用于标注按名称匹配方式

    @AutoWired进行自动装配

    @Scope用与进行作用于匹配

    当需要使用注解进行操作需要在xml进行以下配置

    1.添加context命名空间

    2.标注扫描包中的类

    <context-component-scaan base-package="*">

    也可以通过注解配置事务处理

    <tx:annotation-driven transaction-manager="txManager">

    在业务方法中添加@Transactional实现,具有以下特性

      1.传播设置PROPEAGATION_REQUIRED

      2.隔离级别为ISOLATION_DEFAULT

      3.事务为r/w

      4.超时默认以来事务处理

  • 相关阅读:
    SharePoint Designer
    SharePoint Tricks
    树型dp(2019/1/19学习笔记) by csy
    2019/2/21测试(noip2015提高组day2
    loj刷题记录2019/2/20
    2019/2/16测试
    splay(水题)
    noip2016提高组day2
    2019/2/13测试(noip2016提高组day1原题)
    洛谷p1083借教室
  • 原文地址:https://www.cnblogs.com/EraserHead/p/6610808.html
Copyright © 2020-2023  润新知