<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.0</version>
</dependency>
.
.
该文件包含了user这一实体涉及到的所有增删改查的SQL语句。
如:
.
.
该文件说明sql映射文件位置(引入上述的user.xml)。
因需使用spring框架,所以其数据源具体的配置信息放入spring的配置文件,此文件中指明数据源bean名称即可。:
<sqlMapConfig>
<sqlMap resource=“user.xml” />
</sqlMapConfig>
<property name=”dataSource”>
<ref bean=”dataSource”/>
</property>
.
.
该文件包含了ibatis的配置,数据源配置,程序DAO层、Action层、Service层等的配置。
(1)ibatis配置,如:
<bean id=“sqlMapClient” class=“org.springframework.orm.ibatis.SqlMapClientFactoryBean”>
<property name=“configLocation”>
<value>classpath:sqlMapConfig.xml</value>
</property>
</bean>
(2)数据源配置,如:
<bean id=“dataSource”
class=“org.springframework.jdbc.datasource.DriverManagerDataSource”>
<property name=“driverClassName”>
<value>com.mysql.jdbc.Driver</value>
</property>
<property name=“url”>
<value>jdbc:mysql://localhost/test</value>
</property>
<property name=“username”>
<value>root</value>
</property>
<property name=“password”>
<value>test</value>
</property>
</bean>
(3)程序bean的配置,如user的DAO、Action、Service:
<bean id=“userDAO” class=“com.taobao.login.dao.impl.UserDAOImpl”></bean>
<bean id=“userAction” class=“com.taobao.login.action.UserAction”></bean>
<bean id=“userService” class=“com.taobao.login.service.impl.UserServiceImpl”></bean>
参数介绍
1) id: 可自定义,但需保证唯一性;程序中引用id值即可。
2) property:配置具体属性;
3) value:具体的属性值;
4) class: 指定bean关联的类,全路径;
5) name: 类中需引用的方法名;对该class中指定name的set方法,传入value的值。
———————————————————————————–
上述文件也可进行下优化处理:
PS1:为了使applicationContext.xml文件更清晰可读,
可以把各类的配置文件,分成若干个spring文件,再在总的applicationContext.xml文件中import其它几个spring配置文件。
如:
<import resource=“spring-dataSource.xml”/>
<import resource=“spring-ibatis.xml”/>
<import resource=“spring-user.xml”/>
PS2:上述配置文件中会使用到一些常量值,如数据源、用户名、密码等,可再抽取成jdbc.properties文件统一赋值管理,其它文件中客户可使用 ${} 来引用该变量值。
<bean id=“dataSource”
class=“org.springframework.jdbc.datasource.DriverManagerDataSource”>
<property name=“driverClassName”>
<value>${jdbc.driverClassName}</value>
</property>
<property name=“url”>
<value>${jdbc.url}</value>
</property>
<property name=“username”>
<value>${jdbc.username}</value>
</property>
<property name=“password”>
<value>${jdbc.password}</value>
</property>
</bean>
PS3:jdbc.properties文件路径是在applicationContext.xml中配置,
如下段代码表示取classpath路径下的jdbc.properties文件<匹配本地项目工程目录/target下的所有文件>)
<bean id=“propertyConfigurer”
class=“org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
<property name=“locations”>
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
————————————————————————————
.
.
Web工程,可以直接在项目工程中的web.xml文件里引入spring的总配置文件,再加入spring监听即可,如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
.
.
经过上述5个步骤,即已成功配置spring+ibatis框架,至于程序中如何使用,可参见下方例子:
//声明bean ,其中sqlMapClient必须和spring配置文件中的id保持一致
//如是继承类,只需在父类中声明即可,子类中可直接使用
protected SqlMapClient sqlMapClient;
//注入bean属性,spring通过setter注入,利用setter方法的属性来配置属性值
public void setSqlMapClient(SqlMapClient sqlMapClient) {
this.sqlMapClient = sqlMapClient;
}
//bean使用,此时不需要再实例化sqlMapClient,可以直接使用该对象
public UserDO insertUser(UserDO userDO){
try {
sqlMapClient.insert(“insertUser”,userDO);
return userDO;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
Spring的功能很强大,随便google一下,就可以搜出一堆的优点介绍,但偶暂时未体会到那么多,因为应用场景也小,现在暂时体会到的Spring几个好处是:
1. 可以实现控制反转。
直白点的理解是通过一个配置文件集中控制程序,达到不用修改代码即可改变程序功能的作用(配置过的部分才起作用)。
2. 可以实现AOP面向方面编程。
直白点的理解 类似于公共业务处理,有些模块都需要处理同一业务,可以使用spring来控制,不用在每个模块中 再去剖析或编写这些公共业务的代码。
相当于对程序里部分功能,做了一个横向管理。
3. 方便解耦,简化开发。
不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用
使用最明显的一点是使用配置过的对象时,程序中声明后即可直接使用,不用再实例化出一对象,提高开发效率。
【问题】:在测试TOPAPI的过程中,使用过@Resource标签功能来注入bean属性,即:
// 自动注入 bean名称为 userService的 Bean
@Resource
private UserService userService;
但在此工程中@Resource功能无法体现,编译时总是报空指针错误,应该未注入成功,Why?
.
【原因】spring容器中缺少一个负责处理这些注释的 BeanPostProcessor的bean.导致@Resource无效
【解决方法】spring配置文件中加入
<bean class=”org.springframework.context.annotation.CommonAnnotationBeanPostProcessor”/>
即可。