Spring–服务层与dao层传统写法示例
- 1.在web-inf目目录下创建lib文件夹,将相关jar包全部引入
- 2.在src下创建配置文件(applicationContext.xml)
- 3.在src下创建service、dao、test包
- 4.在service包下创建接口(UserService.java),并创建类(UserServiceImpl.java)实现接口中的方法。
//创建service接口
public interface UserService {
public void delete();
}
public class UserServiceImpl implements UserService{
@Override
public void delete() {
}
}
- 5.创建用户的Dao接口(UserDao.java),并创建类(UserDaoImpl)实现接口中的方法
public interface UserDao {
public void delete();
}
public class UserDaoImpl implements UserDao{
@Override
public void delete() {
System.out.println("从数据库当中删除记录");
}
}
- 6.在UserServiceImpl中new一个UserDaoImpl,并调用其中的方法
public class UserServiceImpl implements UserService{
private UserDao userDao = new UserDaoImpl();
@Override
public void delete() {
userDao.delete();
}
}
- 7.在test包中创建测试类:在测试类中创建UserService的接口,并调用其中的方法即可层层完成操作
public class UserTest {
@Test
public void test(){
UserService userService = new UserServiceImpl();
userService.delete();
}
}
Spring–服务层与dao层Spring配置写法
- 1.在applicationContext.xml中添加配置
<!--配置文件的方式-->
<bean id="userDao" class="com.helong.dao.UserDaoImpl"></bean>
<bean id="userService" class="com.helong.service.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
- 2.将UserDaoImpl类中new new UserDaoImpl();修改为类的属性并为该属性添加set方法
public class UserServiceImpl implements UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void delete() {
userDao.delete();
}
}
- 3.测试
public class UserTest {
@Test
public void test(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
userService.delete();
}
}
Spring–服务层与dao层Spring注解的写法
- 1.在applicationContext.xml中添加类的注解扫描
<!--注解的方式-->
<!--先要告诉哪个包要使用注解-->
<context:component-scan base-package="com.helong"/><!--这种写法表示在这个目录之下的所有的文件均会被注解扫描-->
- 2.在类中添加注解
- UserServiceImpl中调用的是UserDaoImpl类中的方法,所以要给UserDaoImpl类创建注解并在UserServiceImpl类中使用注解获得这个类
@Repository("userDao")//添加位置
public class UserDaoImpl implements UserDao{
@Override
public void delete() {
System.out.println("从数据库当中删除记录");
}
}
public class UserServiceImpl implements UserService{
/*
//方式一
@Autowired//这种方式自动加载不会显这个类是从哪个注入过来的所以一般不用
private UserDao userDao;
*/
//方式二,这种方式指定是从哪儿获取过来的,便于理解
@Resource(name="userDao")
private UserDao userDao;
@Override
public void delete() {
userDao.delete();
}
}
- 编写测试类,由于测试类要通过UserServiceImpl 来获取操作(层层联系的方式),所以要在该类前面加上注解,然后测试类再通过getBean(“对应类的注解的名字”)来为这个类创建对象
@Service("userService")
public class UserServiceImpl implements UserService{
/*
//方式一
@Autowired//这种方式自动加载不会显这个类是从哪个注入过来的所以一般不用
private UserDao userDao;
*/
//方式二,这种方式指定是从哪儿获取过来的,便于理解
@Resource(name="userDao")
private UserDao userDao;
@Override
public void delete() {
userDao.delete();
}
}
public class UserTest {
@Test
public void test(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
userService.delete();
}
}
注:
- @Repository(“userDao”), @Resource(name=“userDao”)的写法都代表的是同一个意思,注释在不同的层次中的不同表示
- service层和dao层之间都是通过面向接口编程的方式来实现的,层层之间是相互联系的,层层递进的
- 在使用注解的时候,可以先想一想传统的方式是怎么实现的,然后把这种实现方法用注解代替即可。这样更便于理解。