i)
2. 编写UserServices的实现类UserServicesImpl.java,代码如下:
/**
*
*/
package cn.com.book.demo.services.impl;
import java.util.List;
import cn.com.book.demo.hibernate.dao.Tuser;
import cn.com.book.demo.hibernate.dao.TuserDAO;
import cn.com.book.demo.services.UserServices;
/**
* @author Noble.Yang
*
*/
public class UserServicesImpl implements UserServices {
private TuserDAO userDAO = null;
public void setUserDAO(TuserDAO userDAO) {
this.userDAO = userDAO;
}
/*
* (non-Javadoc)
*
* @see cn.com.book.demo.services.UserServices#register(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String,
* java.lang.String)
*/
public int register(String userName, String password, String name,
String email, String phone) {
int result = -1;
// 校验传过来的参数是否合法
if (userName == null || userName.equals("")) {
result = 2;
} else if (password == null || password.equals("")) {
result = 3;
} else if (name == null || name.equals("")) {
result = 4;
} else {
this.initDAO();
List userList = this.userDAO.findByUserName(userName);
if(userList != null && userList.size()>0){
result = 1; // 需要添加的用户名已经存在
}else{
Tuser tUser = new Tuser();
tUser.setUserName(userName);
tUser.setPassword(password);
tUser.setName(name);
tUser.setEmail(email);
tUser.setPhone(phone);
this.userDAO.attachDirty(tUser);
result = 0;
}
}
return result;
}
/*
* (non-Javadoc)
*
* @see cn.com.book.demo.services.UserServices#verifyUser(java.lang.String,
* java.lang.String)
*/
public int verifyUser(String userName, String password) {
int result = -1;
// 校验用户名和密码,用户名和密码都不能为空
if (userName == null || userName.equals("") || password == null
|| password.equals("")) {
result = 3;
} else {
// 初始化dao对象
this.initDAO();
// 根据用户名,从数据库中查找对象
List userList = this.userDAO.findByUserName(userName);
if (userList == null || userList.size() == 0) {
result = 1;// 没有记录
} else {
Tuser user = (Tuser) userList.get(0);
if (user == null) {
result = 1;
} else {
if (password.equals(user.getPassword())) {
result = 0; // 用户名和密码校验成功
} else {
result = 2; // 用户名和密码不匹配
}
}
}
}
return result;
}
/**
* 初始化成员变量dao,如果没有初始化,就直接自己new一个Tuser实例
* 建议每个服务方面里面,在做调用dao做具体操作前,都调用该方法
*
*/
private void initDAO() {
if (this.userDAO == null) {
this.userDAO = new TuserDAO();
}
}
}
代码说明:
UserServicesImpl类,对UserServices中定义的两个接口进行了具体的实现:校验用户名密码和新注册一个新用户.具体逻辑,可以详细阅读上面的源代码.下面是几个需要注意的地方:
i) 该代码中有个成员变量 private TuserDAO userDAO,并有一个对应的符合JavaBean规范的set方法.
这个成员变量和规范的set方法是必须的,因为我们要使用Spring进行IOC注册,其中编写注册Bean的配置文件需要.
同样,如果该服务中还要用到别的DAO,也需要添加对应的成员变量和set方法
ii) Private void initDAO方法
该方法是初始化userDAO成员变量的,主要是容错用,防止Spring注册时有纰漏的时候,没能及时初始化对应的dao实例,引起不必要的空指针异常.当然为了配合有效的防止空指针异常,需要在每个需要调用dao对象的时候,先调用该方法.
目前initDAO方法里面,只是实现了当userDAO为空的时候,new一个TuserDAO实例,如果有多个dao的话,需要同样添加多个判断和多个new实例语句.
iii)
3. 在Spring中,注册UserServices Bean
我们在上面定义资源和配置文件里面,有规划出了一个applicationContext-service.xml文件,该文件是用来注册服务类和相关事务管理的.我们在applicationContext-service.xml中,添加如下内容:
<bean id="userService"
class="cn.com.book.demo.services.impl.UserServicesImpl">
<property name="userDAO">
<ref bean="TuserDAO" />
</property>
</bean>
这是注册userService服务的具体配置,详细说明如下
Bean标签,用来定义一个bean的具体实例,一个bean一个实例
Id 属性:定义该bean实例的标记,必须唯一,不能跟别的bean的id重复.
Class属性:指定bean实例的具体类名
Property子标签:装配bean实例中用到的属性
Name属性:是bean属性的变量名称.UserServicesImpl类中,有个userDAO属性,name的值必须跟代码中的属性值一样.
Ref标签:指定属性的具体引用哪个bean定义,这引用的是id为TuserDAO的bean. TuserDAO Bean的定义,我们在applicationContext.xml文件中可以找到详细的定义,这是我们在生成POJO对象的时候,自动生成的:
<bean id="TuserDAO"
class="cn.com.book.demo.hibernate.dao.TuserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
我们如果要注册别的bean的话,也可以根据上面的介绍类推注册