Spring学习笔记一(2005.12.30)

    技术2022-05-11  65

    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);     

     


    最新回复(0)