接上篇文章:
项目如下( 简单的构建 ),并且将每层做的业务逻辑进行简单的描述
首先,社么是IOC 和 DI
IOC: [ 控制反转 ]Spring中的IOC是一种思想,而DI就是这种思想的实现的方法;
(1)contorller层
-
当前的contrller层中间的业务主要是进行:控制对浏览器页面的跳转,主要对接的类就是当前的service层的
接口和接口的实现类进行对接;针对service层返回的数据映射到浏览器上(以及一些的简单的逻辑的编写)。
package com.jie.controller; // 当前类是一个控制层Controller,目前还没有对当前的类进行配置,等后面会进行配置 public class LonginController { }
(2)dao层
-
主要是对数据库数据一些操作,通过jdbc或者mybatis对数据库的数据进行操作【增,删,改,查】;而当前的dao层主要是一些接口,真正实现的还是dao下的impl的实现类进行数据的【增,删,改,查】。
package com.jie.dao; public interface UserDao { // 增 public void addUser(); // 删 public void deleteUser(); // 改 public void updateUser(); // 查 public void queryUser(); }
(3)dao.impl层
-
当前类实现了dao层的接口并且对dao层中的方法进行了实现,完成对数据的【增删改查】。
package com.jie.dao.impl; import com.jie.dao.UserDao; public class UserDaoImpl implements UserDao { @Override public void addUser() { System.out.println(" add user "); } @Override public void deleteUser() { System.out.println(" delete user "); } @Override public void updateUser() { System.out.println( " update user " ); } @Override public void queryUser() { System.out.println(" query user "); } }
(4)service层
-
业务控制层,在当前的service层中主要是一些对接的接口,并通过service层的impl下的实现类进行对数据的
操作,当前接口中主要对dao层中的数据返回的数据进行一些业务逻辑操作以及类型之间的转换而定义的一些抽象的方法。
package com.jie.service; public interface UserService { public void addService(); public void deleteSerevice(); public void upateSersvice(); public void queryService(); }
(5)service.impl层
-
实现了service层接口的方法,对service接口中[dao层中的数据返回的数据]进行一些业务逻辑操作以及类型之间的转换而定义的一些抽象的方法进行实现,并且向controller层映射数据。
package com.jie.service.impl; import com.jie.dao.UserDao; import com.jie.dao.impl.UserDaoImpl; import com.jie.service.UserService; public class UserServiceImpl implements UserService { /* 问题描述: * 当前的userService的类中的实现一般都是对业务逻辑性的编辑,假设当前的类中使用到了dao层中的数据,就需要创建一个userDao的对象或者实例,那么如果当前的项目是一个大的项目,对dao层的修改也将会是一个大的耗时的操作,那么对开发很不友好,所以这里需要IOC控制反转 * */ private UserDao userDao; // 第一步:添加当前属性userDao的get和set方法 public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void addService() { System.out.println(" add is service "); userDao.addUser(); } @Override public void deleteSerevice() { System.out.println(" delete is service "); } @Override public void upateSersvice() { System.out.println(" update is service "); } @Override public void queryService() { System.out.println(" query is service "); } }
(6)resources下的xml>>>>>>>spring-context.xml
-
spring的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!-- schema : 是一种规范 后缀为xsd的文件 xml schama definition 的缩写 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- Spring MVC配置 --> <bean id="userDaoImpl" class="com.jie.dao.impl.UserDaoImpl"></bean> <!-- 在当前的userServiceImpl的类中的userDao的实现类交由Spring进行管理 >>IOC 控制反转 前提条件: userDao 在当前的userDaoImpl类中实现了getter和setter的方法 --> <bean id="userServiceImpl" class="com.jie.service.impl.UserServiceImpl"> <!-- 这个就是依赖注入 将userDao的实现类通过set注入到当前的userServiceImpl中 --> <property name="userDao" ref="userDaoImpl"></property> </bean> </beans>
(7)测试类
SpringFactoryTest类,用来测试数据
package com.jie.test; import com.jie.dao.impl.UserDaoImpl; import com.jie.service.impl.UserServiceImpl; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringFactoryTest { @Test public void SpringFctoryTest(){ ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("/spring-context.xml"); // UserDaoImpl userDaoImpl = (UserDaoImpl)classPathXmlApplicationContext.getBean("userDaoImpl"); UserServiceImpl userServiceImpl = (UserServiceImpl)classPathXmlApplicationContext.getBean("userServiceImpl"); // userDaoImpl.addUser(); // 此时:在我们启动工厂的时候,并没有创建userDao的对象,但是在实际运行中 // 通过使用了userDaoImpl的对象间接性的调用了userDao对象的add的方法,实现了数据的增加操作 userServiceImpl.addService(); } }