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