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