欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 模拟三层--控制层、业务层和数据访问层

模拟三层--控制层、业务层和数据访问层

2024/10/25 20:25:17 来源:https://blog.csdn.net/2303_79008526/article/details/141141114  浏览:    关键词:模拟三层--控制层、业务层和数据访问层

三层的概念:https://developer.aliyun.com/article/1390024

一、新建一个项目

        我新建好的项目名为spring__ioc_02,然后在 src-main-java 下建立三层(数据访问层、业务层和控制层)的包 dao、service 和controller、并在包下建立相应的接口和实现类

        Project 只能一次有一个,我们想要让所有的项目出现在一列,就需要在现有 Project 基础上 New-Module

然后 next

        Parent 改为 <None>;删掉我们依赖建立的目录 \Demo001\,若不删,新项目就会建立在 \Demo001\ 下,称为项目 Demo001 的子项目

然后 finish 即创建成功

(一)创建三层(控制层、业务层和数据访问层)对应的包,包下建立相应的接口和实现类

1、控制层

紫色为包名、绿色为接口名

package com.apesource.controller;public interface IUserController {//定义方法public void save();
}

创建实现类

package com.apesource.controller;
//UserControllerImp 实现 IUserController 接口并重写方法
public class UserControllerImp implements IUserController{@Overridepublic void save() {System.out.println("==========Controller层的新增方法=========");}
}

2、业务层

把 .controller 删掉写成 .service,就成功建立与 Controller 同级的包 service

同 Controller 步骤创建接口和实现类

package com.apesource.service;public interface IUserService {public void save();
}
package com.apesource.service;public class UserServiceImp implements IUserService{@Overridepublic void save() {System.out.println("===========service层的新增方法===========");}
}
package com.apesource.dao;import java.sql.SQLOutput;
import java.util.SortedMap;public interface IUserDao {public void save();
}
package com.apesource.dao;public class UserDaoImp implements IUserDao{@Overridepublic void save() {System.out.println("==========dao层的新增方法=========");}
}

三层准备完毕、写测试类

(二)测试类

建一个与 Conterller 包同级的包 test,test里面建立一个 Test01 测试类

测试类不要忘了main 方法

1、高耦合方式

package com.apesource.test;import com.apesource.controller.IUserController;
import com.apesource.controller.UserControllerImp;import java.sql.SQLOutput;public class Test01 {public static void main(String[] args) {IUserController controller=new UserControllerImp();controller.save();}
}

当然,dao 层为数据访问层、然后 service 层调用数据访问层,controller 层调用 service 层,所以目前的测试类执行有误,我们还需要对 service 层和controller 层做一定的处理,new 相应对象(高耦合)

package com.apesource.service;import com.apesource.dao.IUserDao;
import com.apesource.dao.UserDaoImp;public class UserServiceImp implements IUserService{IUserDao dao=new UserDaoImp();@Overridepublic void save() {System.out.println("===========service层的新增方法===========");dao.save();}
}
package com.apesource.controller;import com.apesource.service.IUserService;
import com.apesource.service.UserServiceImp;public class UserControllerImp implements IUserController{IUserService service = new UserServiceImp();@Overridepublic void save() {System.out.println("==========Controller层的新增方法=========");service.save();}
}

测试结果(运行成功):

2、低耦合方式

我们要实现解耦,先将 业务层和数据访问层的实现类的路径 拿出来放在 properties 文件中

dao=com.apesource.dao.UserDaoImp
service=com.apesource.service.UserServiceImp

建一个与 Conterller 包同级的包 util,util 里面建立一个 BeansFactory 工厂类,通过这个类实现解耦

package com.apesource.util;import com.apesource.test.Test01;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class BeansFactory {//按照用户需求以解耦的方式创建对象public static Object getBean(String key){try {//1.创建工具类Properties properties = new Properties();//2.加载文件InputStream inputStream = Test01.class.getClassLoader().getResourceAsStream("beans.properties");properties.load(inputStream);//3.通过key获取valueString classPath = properties.getProperty(key);return Class.forName(classPath).newInstance();} catch (IOException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException exception) {exception.printStackTrace();}return null;}}
package com.apesource.test;import com.apesource.controller.IUserController;
import com.apesource.controller.UserControllerImp;import java.sql.SQLOutput;public class Test01 {public static void main(String[] args) {IUserController controller=new UserControllerImp();controller.save();}
}

当然,dao 层为数据访问层、然后 service 层调用数据访问层,controller 层调用 service 层,所以目前的测试类执行有误,我们还需要对 service 层和controller 层做一定的处理

package com.apesource.service;import com.apesource.dao.IUserDao;
import com.apesource.dao.UserDaoImp;public class UserServiceImp implements IUserService{IUserDao dao= (IUserDao) BeansFactory.getBean("dao");@Overridepublic void save() {System.out.println("===========service层的新增方法===========");dao.save();}
}
package com.apesource.controller;import com.apesource.service.IUserService;
import com.apesource.service.UserServiceImp;public class UserControllerImp implements IUserController{IUserService service = (IUserService) BeansFactory.getBean("service");@Overridepublic void save() {System.out.println("==========Controller层的新增方法=========");service.save();}
}

测试结果(运行成功):

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com