Spring学习笔记一(2005.12.30)

来源:互联网 发布:v2视频软件下载 编辑:程序博客网 时间:2024/04/30 15:29

ApplicationContext ctx

1,定义资源文件获得资源文件的消息,国际化信息
<bean id="messageResource" class="org.springFramework.context.support.ResourceBoundleMessageSource">
 <property name="basenames">
  xxxx
 </property>
</bean>
将会搜索xxxx.properties,xxxx_zh.properties ,xxxx_ch.properties等。

2,
程序里使用资源文件 :ctx.getMessage('key',arg);
页面上使用资源文件:<spring:message code="keyxxx"/>


3,使用其他文件。
 Resource rs = ctx.getResource("classpath:config.properties");
 File file = rs.getFile();
 目录规则:
 file:c:/test。txt
 /config.properties
 classpath:config.properties
 三种方式。

4,事件传播
  不过没有找到ApplicationListener这个类。

5, WebApp获取ApplicaionContext的方法,
 首先是在web。xml中进行配置,可以配置成一个listener,也可以配置成一个servlet。
 然后程序里使用WebApplicationContextUtils.getWebApplicationContext.获得饮用。

6,Spring可以和很多框架进行集成。
 Struts+Spring,Webwork+Spring。

7,Spring可以有自己的调度类,DispatherServlet。
 使用的配置文件就是beans的配置,名字可以随便取。

8,Sping配置文件(具体名字见web.xml中对ContextLoaderServlet的参数)类似于Struts的配置文件。
 定义viewer使用的是系统类:
  org.springframework.web.servlet.view.InternalResourceViewResolver
 Request mapping 使用的系统类:
  org.springframework.web.servlet.handler.SimpleUrlHandleMapping
 对Action的定义使用自定义类,但这些类都是下面类的子类:
  SimpleFormController
 Actoin的属性包括:
  1,跳转的页面,和view关联
  2,封装form类,就是一个普通的javabean。
  
9,Acition类的内容,
  实现onsubmit( 封装的form,异常对象) 返回一个ModelAndView。
  ModelAndView用字符串初始化,字符串来自Action的两个跳转view名称。
  还可以把Map传入ModelAndView构造函数,用来返回消息。


10,Spring自带的数据验证功能。
 10.1,验证类作为Aciotn的一个名为“validator”的属性在配置文件中配置。
 此类继承org.springframework.validation.Validator
 需要实现两个接口,support(传入一个类),验证此类是否是Action对应的form类。
 validator(object obj,Errors err )首先把obj转为form类对象,如果有错误放到errors里,用法和
  struts类似。
 
 10.2,表现层页面需要的显示错误
  全部错误:
  <spring:bind path="command.*">
   //遍历status.errorMessages
  </spring:bind>  
 
  单个错误:
  <spring:bind path="command.username">
   <input type="text" value="${staus.value}" name="${status.expression}">
   <c:if test="${status.error}">
    //遍历status.errorMessages
   </c:if>
  </spring:bind>
  如果已经在Action中配置了commandName,那么就不使用command了,而是使用配置的名字
  <bean id=‘loginActoni’>
   <property name="commandName">
    <value>RegisterInfo</value>
   </property>
  </bean>

11, 异常处理
 在Dispather的配置文件中配置
 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
 定义两个属性:
 <property name="defaultErrorView">
 <property name="exceptionMapping">
  <props>
   <prop key="java.sql.SQLException">sss</prop>
   <prop key="java.lang.RuntimeException">yyy</prop>
  </props>
 </property> 
 可以按不同异常映射到不同的页面。
 异常页面从request.getAttribute("Exception")取得Exception对象。显示他的message属性。

12,国际化
 看完1后,补充如下:
 Spring判断用户Locale的方式有三种,request中取,session中取,cookie中取客户端的locale。
 分别用三个类,配置到配置文件中。

13,数据持久层(重要)对事务的封装
 Spring是依赖容器的参数化事务管理不用写代码。
 见p67。
 1,在配置文件中配置完数据源,
 2,之后配置事务管理的bean,数据源是它的属性。
 3,DAO,事务员是它的属性。
 4,事务beanDAOProxy,事务策略,事务bean,DAO都是它的属性。

14,数据持久层,对JDBC的封装
 org.springframework.jdbc.core.JdbcTemplate.
 JdbcTemplate jdbctemplate = new JdbcTemptlate( datasource );
 jdbctemplate.update("xxxxx");
 jdbctemplate.update("xxxxx",new PreparedStatementSetter(){
  public void setValues( PreparedStatementSetter ps ){
   ps.setInt(1,15);
   ps.setString(2,"jjjjjjj");
  }
 });
 jdbctemplate.query("select ...",new RollbackHandler(){
  public void processRow( ResultSet rs ){
   User user = new User();
   user.setName= rs.getString("name");
   userList.add( user );
  }
 });

 .call()可以调用存储过程。
 query,update还有很多不同版本的实现。
 

15, JDBC封装还要引入事务管理机制,默认是没有事务的。
 两种方式
 1,代码控制的,在DAO里TransactionTemplate使用它的方法。
 2,参数化配置的事务。配置一个ProxyDAO,不用写这个类,只需要在配置文件里增加他对DAO的事物设置。
  使得DAO代码十分简洁。

 测试代码:
 InputStream is = new FileInputStream("xxx.xml");
 XmlBeanFactory factory = new XmlBeanFactoy( is );
 UserDAO dao = (UserDAO)factory.getBean("ProxyDAO");
 dao.insert();//这样就行了

16,Hibernate in Spring
 只需修改配置文件增加一个bean名字为sessionFactory,数据源作为他的属性。
 TrsactionManager的属性:sessionFactory
 IDAO接口:定义数据库操作方法。
 DAO的属性:sessionFactory。继承HibernateDAOSupport,并实现IDAO接口。
   里面使用getHibernateTemplate模版进行数据库操作。
 ProxyDAO的属性:transactionManager,DAO.
 
 测试例子:
 IUserDAO dao=(IUserDAO)factory.getBean("ProxyUserDAO"); 
 User user = new User();
 user.setxxx...
 dao.insertOrUpdate(user);
 
  
  

 

原创粉丝点击