spring知识点

1.WEB MVC

   C:(1) 处理器映射

              * BeanNameUrlHandlerMapping(缺省)

              * SimpleUrlHandlerMapping


         (2) AbstractController基类

            |--- MultiActionController 多个行为封装在这个类里,请求url里参数method=方法名

            |--- AbstractCommandController  它能够将请求参数绑定到你指定的命令对象,提供验证功能

                    AbstractFormController  支持表单提交,用户输入绑定到命令对象,验证表单内容,防止重复提交、表单验证以及一般的表单处理流程

                  SimpleFormController   提供更多的支持。你可以为其指定一个命令对象,显示表单的视图名,当表单提交成功后显示给用户的视图名等等

                  AbstractWizardFormController

    V:

       1) 视图解析器

      InternalResourceViewResolver

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

<property name="prefix" value="/WEB-INF/jsp/"/>

<property name="suffix" value=".jsp"/>

</bean>

      ResourceBundleViewResolver 需要一个属性文件来定义view名到1) class 2) URL的映射


  (2) i18n:

< 资源名 >_< 语言代码 >_< 国家/ 地区代码 >.properties

    1) jdk里:

     a)ResourceBundle:

ResourceBundle rb1 = ResourceBundle.getBundle("com/baobaotao/i18n/resource", Locale.US);

rb1.getString("greeting.common")

          b)格式化

  greeting.common=How are you!{0},today is {1}

  Object[] params = {"John", new GregorianCalendar().getTime()};

String str1 = new MessageFormat(rb1.getString("greeting.common"),Locale. US).format(params);

   2) spring封装:

        a) MessageSource 接口:   String getMessage(String code, Object[] args, String defaultMessage, Locale locale)

     b) 实现类1: ResourceBundleMessageSource

   MessageSource ms = (MessageSource)ctx.getBean("myResource");//返回

  ResourceBundleMessageSource
Object[] params = {"John", new GregorianCalendar(). getTime()};
String str1 = ms.getMessage("greeting.common",params,Locale.US);

无须再分别加载不同语言、不同国家/ 地区的本地化资源文件,仅仅通过资源名就可以加载整套的国际化资源文 件。此外,我们无须显式使用MessageFormat 操作国际化信息,仅通过MessageSource# getMessage() 方法就可以完成操作了

         c) 实现类2: ResourceBundleMessageSource 的唯一区别在于它可以定时刷新资源文件



2. IOC

bean.xml

 <beans>
<bean id="TheAction" class="net.chen.spring.qs.UpperAction">
<property name="message">
<value>HeLLo</value>
</property>
</bean>
</beans>


public void testQuickStart () {
ApplicationContext ctx=new  FileSystemXmlApplicationContext ("bean.xml");
Action a= (Action) ctx.getBean ("TheAction");
System.out.println (a. execute ("Rod Johnson"));
}







3.AOP

    每个组件负责 一部分功能,这些组件也经常带有一些除了核心功能之外的附带功能 。系统服务如日志、事务管理和安全经常融入到一些其他功能模块中。这些系统服务通常叫做交叉业务.

(1)AspectJ( 需要使用到AspectJaspectjweaver.jar)

          1)   使用基于Schema 的配置文件配置Spring AOP

        a) 原有的业务逻辑类

        b) 编写Advice(简单Aop代码,例如log输出,事务处理)

        c) 配置

           1)配置切入点pointcut

           < aop:pointcut id = "somePointcut"

                    expression = "execution(* springroad.demo.chap5.exampleB.Component.business*(..))" />

          2)将pointcut与advice关联            

           < aop:before pointcut-ref = "somePointcut"

              method = "beginTransaction" />

           < aop:after-returning pointcut-ref = "somePointcut"

              method = "endTransaction" />


          2)使用anotation

  (2) 仅依靠Spring AOP 方面的API (不要使用AspectJaspectjweaver.jar)

      1) advice是实现相关Advice (通知) 接口 ,

Spring实现了AOP联盟接口。在Spring AOP中,存在如下几种通知(Advice)类型
Before通知:在目标方法被调用前调用,涉及接口org.springframework.aop.MethodBeforeAdvice;
After通知:在目标方法被调用后调用,涉及接口为org.springframework.aop.AfterReturningAdvice;
Throws通知:目标方法抛出异常时调用,涉及接口org.springframework.aop.MethodBeforeAdvice;
Around通知:拦截对目标对象方法调用,涉及接口为org.aopalliance.intercept.MethodInterceptor。

例中 SleepHelper实现此接口

 

  2) pointcut: 那将方法要被截获

<bean id="spleepPointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
  <property name="pattern" value=".*sleep"/>
</bean>

 

 3) advicor将pointcut与advice捆绑在一起

<bean id="sleepHelperAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
     <property name="advice" ref="sleepHelper"/>
     <property name="pointcut" ref="sleepPointcut"/>
</bean>

 

4)产生代理对象

<bean id="humanProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
     <property name="target" ref="human"/>
     <property name="interceptorNames" value="sleepHelperAdvisor" />
     <property name="proxyInterfaces" value="test.spring.aop.bean.Sleepable" />
</bean>

 

(3)自动代理

自动代理的功能,能让切点跟通知自动进行匹配,修改配置文件如下:
 <bean id="sleepHelper" class="test.spring.aop.bean.SleepHelper"></bean>


  <bean id="sleepAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    <property name="advice" ref="sleepHelper"/>
    <property name="pattern" value=".*sleep"/>
  </bean>


  <bean id="human" class="test.spring.aop.bean.Human"> </bean>     --target


  <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

 

 


4.事务管理

  接口 PlatformTransactionManager

              |---DataSourceTransactionManager

              |---HibernateTransactionManager

              |---JdoTransaction-Manager

              |---JtaTransactionManager


public interface PlatformTransactionManager

  TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;

  void commit(TransactionStatus status)  throws TransactionException;

  void rollback(TransactionStatus status)  throws TransactionException;

TransactionException是UncheckedException.事务的失败通常都是致命的错误,Spring不强迫您一定要处理,而是让您自行选择是否要捕捉异常。

   getTransaction()方法根据一个TransactionDefinition对象来回传一个TransactionStatus对 象,TransactionDefinition接口的实例定义了事务的隔离程度(Isolationlevel)、传播行为 (Propagationbehavior)、超时(Timeout)、只读(Read-only)等,TransactionStatus代表着一个新 的事务发起或已经存在的事务,您可以通过它来控制事务的执行或调查的状态.


JDBC声明事务管理

  (1) 使用TransactionProxyFactoryBean,指定要介入的事务管理对象及其方法。  需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Javabean。当我们定义TransactionProxyFactoryBean 时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性。事务属性含有事务定义。


< bean id ="personDao" class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
        
<!--    为事务代理bean注入事务管理器 -->
            
< property name ="transactionManager" >< ref bean ="transactionManager" /></ property >
        
<!--    设置事务属性 -->
        
< property name ="transactionAttributes" >
< props >
      
<!--    所有以find开头的方法,采用required的事务策略,并且只读 -->
                
< prop key ="find*" > PROPAGATION_REQUIRED,readOnly </ prop >
      
<!--    其他方法,采用required的事务策略 ->
                 <prop key="*">PROPAGATION_REQUIRED</prop>
             </props>
         </property>
        <!--   为事务代理bean设置目标bean
-->
        
< property name ="target" >
            
< ref local ="personDaoTarget" />
        
</ property >
    
</ bean >


 (2) BeanNameAutoProxyCreator

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值