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