news 2026/3/26 8:01:18

基于 注解 + 配置类 的方式 整合三层架构组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 注解 + 配置类 的方式 整合三层架构组件

项目创建

practice-ioc

最终项目结构

依赖导入

这里的依赖没有版本号,是因为已经在父工程的dependencyManagement统一管理版本了

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.english</groupId><artifactId>ssm-spring-part</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>practice-ioc</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></dependency><dependency><groupId>jakarta.annotation</groupId><artifactId>jakarta.annotation-api</artifactId></dependency></dependencies></project>

实体类准备

packagecom.english.pojo;publicclassStudent{privateIntegerid;privateStringname;privateStringgender;privateIntegerage;privateStringclasses;publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetGender(){returngender;}publicvoidsetGender(Stringgender){this.gender=gender;}publicIntegergetAge(){returnage;}publicvoidsetAge(Integerage){this.age=age;}publicStringgetClasses(){returnclasses;}publicvoidsetClasses(Stringclasses){this.classes=classes;}@OverridepublicStringtoString(){return"Student{"+"id="+id+", name='"+name+'\''+", gender='"+gender+'\''+", age="+age+", classes='"+classes+'\''+'}';}}

持久层

StudentDao接口

packagecom.english.dao;importcom.english.pojo.Student;importjava.util.List;publicinterfaceStudentDao{List<Student>queryAll();}

StudentDao接口的实现类

packagecom.english.dao.impl;importcom.english.dao.StudentDao;importcom.english.pojo.Student;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.jdbc.core.BeanPropertyRowMapper;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.stereotype.Repository;importjava.util.List;@RepositorypublicclassStudentDaoImplimplementsStudentDao{@AutowiredprivateJdbcTemplatejdbcTemplate;@OverridepublicList<Student>queryAll(){Stringsql="select id , name , age , gender , class as classes from students;";List<Student>stuList=jdbcTemplate.query(sql,newBeanPropertyRowMapper<>(Student.class));returnstuList;}}

业务层

StudentService接口

packagecom.english.service;importcom.english.pojo.Student;importjava.util.List;publicinterfaceStudentService{List<Student>findAll();}

StudentService接口的实现类

packagecom.english.service.impl;importcom.english.dao.StudentDao;importcom.english.pojo.Student;importcom.english.service.StudentService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.util.List;@ServicepublicclassStudentServiceImplimplementsStudentService{@AutowiredprivateStudentDaostudentDao;@OverridepublicList<Student>findAll(){List<Student>stuList=studentDao.queryAll();returnstuList;}}

表述层

packagecom.english.controller;importcom.english.config.JavaConfig;importcom.english.pojo.Student;importcom.english.service.StudentService;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;importorg.springframework.stereotype.Controller;importjava.util.List;@ControllerpublicclassStudentController{@AutowiredprivateStudentServicestudentService;publicvoidfind(){List<Student>stuList=studentService.findAll();System.out.println(stuList);}"请忽略这个 test() 方法,这是我测试用的"@Testpublicvoidtest(){AnnotationConfigApplicationContextcontext=newAnnotationConfigApplicationContext(JavaConfig.class);StudentControllerstudentController=context.getBean(StudentController.class);studentController.find();context.close();}}

三层架构 ioc 配置类

packagecom.english.config;importcom.alibaba.druid.pool.DruidDataSource;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.PropertySource;importorg.springframework.jdbc.core.JdbcTemplate;@Configuration@PropertySource("classpath:jdbc.properties")@ComponentScan(basePackages="com.english")publicclassJavaConfig{@Value("${atguitu.url}")privateStringurl;@Value("${atguigu.driver}")privateStringdriverClassName;@Value("${atguigu.username}")privateStringusername;@Value("${atguigu.password}")privateStringpassword;@BeanpublicDruidDataSourcedataSource(){DruidDataSourcedataSource=newDruidDataSource();dataSource.setUrl(url);dataSource.setDriverClassName(driverClassName);dataSource.setUsername(username);dataSource.setPassword(password);returndataSource;}@BeanpublicJdbcTemplatejdbcTemplate(DruidDataSourcedataSource){JdbcTemplatejdbcTemplate=newJdbcTemplate();jdbcTemplate.setDataSource(dataSource);returnjdbcTemplate;}}

运行测试,请看 表述层的 test() 方法

主要是这段代码

@Testpublicvoidtest(){AnnotationConfigApplicationContextcontext=newAnnotationConfigApplicationContext(JavaConfig.class);StudentControllerstudentController=context.getBean(StudentController.class);studentController.find();context.close();}

打印结果如下:

D:\n_Java\jdk-17\bin\java.exe...108,20264:50:25下午com.alibaba.druid.support.logging.JakartaCommonsLoggingImplinfo 信息:{dataSource-1}inited[Student{id=1,name='张三',gender='男',age=20,classes='高中一班'},Student{id=2,name='李四',gender='男',age=19,classes='高中二班'},Student{id=3,name='王五',gender='女',age=18,classes='高中一班'},Student{id=4,name='赵六',gender='女',age=20,classes='高中三班'},Student{id=5,name='刘七',gender='男',age=19,classes='高中二班'},Student{id=6,name='陈八',gender='女',age=18,classes='高中一班'},Student{id=7,name='杨九',gender='男',age=20,classes='高中三班'},Student{id=8,name='吴十',gender='男',age=19,classes='高中二班'}]108,20264:50:25下午com.alibaba.druid.support.logging.JakartaCommonsLoggingImplinfo 信息:{dataSource-1}closing...108,20264:50:25下午com.alibaba.druid.support.logging.JakartaCommonsLoggingImplinfo 信息:{dataSource-1}closedProcessfinishedwithexitcode0

附上图片:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/25 23:19:09

玩转AI造相:科哥定制版Z-Image-Turbo镜像一键部署指南

玩转AI造相&#xff1a;科哥定制版Z-Image-Turbo镜像一键部署指南 你是否曾被社交媒体上那些惊艳的AI生成图像吸引&#xff0c;却因为复杂的安装步骤望而却步&#xff1f;科哥定制版Z-Image-Turbo镜像正是为解决这一问题而生。本文将带你快速上手这款专为文生图优化的镜像&…

作者头像 李华
网站建设 2026/3/23 3:14:31

算法题 水果成篮

水果成篮 问题描述 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树产生的水果种类。 你有两个篮子&#xff0c;每个篮子只能装单一类型的水果&#xff0c;但你可以选择任意两棵树开始收集…

作者头像 李华
网站建设 2026/3/18 12:19:58

Z-Image-Turbo模型剖析:免搭建的云端实验环境带你深入理解

Z-Image-Turbo模型剖析&#xff1a;免搭建的云端实验环境带你深入理解 作为一名AI学习者&#xff0c;你是否曾被复杂的实验环境搭建过程困扰&#xff1f;想要深入理解Z-Image-Turbo模型的架构和原理&#xff0c;却被各种依赖安装、环境配置等问题分散了精力&#xff1f;本文将带…

作者头像 李华
网站建设 2026/3/13 9:03:26

AsterNOS SONiC基于YANG模型的现代网络管理:从CLI到gNMI的演进

从“运维之困”到“模型驱动”&#xff1a;新一代网络管理的必然演进 对于许多网络运维工程师而言&#xff0c;这样的一幕或许并不陌生&#xff1a;面对成百上千台多厂商设备&#xff0c;一边在命令行中重复着繁琐的配置脚本&#xff0c;一边在监控屏幕上审视着分钟级延迟的流…

作者头像 李华
网站建设 2026/3/21 7:50:38

模型轻量化实战:在消费级GPU上优化阿里通义Z-Image-Turbo运行效率

模型轻量化实战&#xff1a;在消费级GPU上优化阿里通义Z-Image-Turbo运行效率 你是否也遇到过这样的困境&#xff1a;想在普通游戏笔记本上运行阿里通义Z-Image-Turbo这样的图像生成模型&#xff0c;却发现原版模型对硬件要求太高&#xff0c;显存动不动就爆满&#xff1f;本文…

作者头像 李华
网站建设 2026/3/16 10:41:32

Z-Image-Turbo全栈开发:快速构建带前后端的完整图像生成应用

Z-Image-Turbo全栈开发&#xff1a;快速构建带前后端的完整图像生成应用 作为一名全栈开发者&#xff0c;你是否遇到过这样的场景&#xff1a;老板突然要求你在周末前交付一个完整的AI图像生成Demo&#xff0c;而你既需要快速搭建后端服务&#xff0c;又要设计简单易用的前端界…

作者头像 李华