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层之间都是通过面向接口编程的方式来实现的,层层之间是相互联系的,层层递进的
  • 在使用注解的时候,可以先想一想传统的方式是怎么实现的,然后把这种实现方法用注解代替即可。这样更便于理解。