{"id":831,"date":"2025-02-09T14:53:46","date_gmt":"2025-02-09T06:53:46","guid":{"rendered":"https:\/\/www.ikaros.love\/?p=831"},"modified":"2025-02-09T14:53:46","modified_gmt":"2025-02-09T06:53:46","slug":"springboot%e5%b8%b8%e8%a7%84%e5%8c%85%e7%bb%93%e6%9e%84","status":"publish","type":"post","link":"https:\/\/www.ikaros.love\/?p=831","title":{"rendered":"Springboot\u5e38\u89c4\u5305\u7ed3\u6784"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"386\" height=\"386\" src=\"https:\/\/www.ikaros.love\/wp-content\/uploads\/2025\/02\/730.png\" alt=\"\" class=\"wp-image-832\" srcset=\"https:\/\/www.ikaros.love\/wp-content\/uploads\/2025\/02\/730.png 386w, https:\/\/www.ikaros.love\/wp-content\/uploads\/2025\/02\/730-300x300.png 300w, https:\/\/www.ikaros.love\/wp-content\/uploads\/2025\/02\/730-150x150.png 150w, https:\/\/www.ikaros.love\/wp-content\/uploads\/2025\/02\/730-200x200.png 200w\" sizes=\"(max-width: 386px) 100vw, 386px\" \/><\/figure>\n\n\n\n<p>com.example.myapp<br>\u251c\u2500\u2500 config<br>\u2502 \u251c\u2500\u2500 DatabaseConfig.java # \u6570\u636e\u5e93\u914d\u7f6e<br>\u2502 \u251c\u2500\u2500 SecurityConfig.java # \u5b89\u5168\u914d\u7f6e<br>\u2502 \u251c\u2500\u2500 SwaggerConfig.java # Swagger\u914d\u7f6e<br>\u2502 \u2514\u2500\u2500 ApplicationProperties.java # \u5e94\u7528\u5c5e\u6027\u914d\u7f6e<br>\u251c\u2500\u2500 controller<br>\u2502 \u251c\u2500\u2500 UserController.java # \u7528\u6237\u63a7\u5236\u5668<br>\u2502 \u251c\u2500\u2500 ProductController.java # \u4ea7\u54c1\u63a7\u5236\u5668<br>\u2502 \u2514\u2500\u2500 ErrorController.java # \u9519\u8bef\u63a7\u5236\u5668<br>\u251c\u2500\u2500 dao<br>\u2502 \u251c\u2500\u2500 UserRepository.java # \u7528\u6237DAO\u63a5\u53e3<br>\u2502 \u251c\u2500\u2500 ProductRepository.java # \u4ea7\u54c1DAO\u63a5\u53e3<br>\u2502 \u2514\u2500\u2500 CustomRepositoryImpl.java # \u81ea\u5b9a\u4e49DAO\u5b9e\u73b0<br>\u251c\u2500\u2500 filter<br>\u2502 \u251c\u2500\u2500 LoggingFilter.java # \u65e5\u5fd7\u8fc7\u6ee4\u5668<br>\u2502 \u251c\u2500\u2500 AuthenticationFilter.java # \u8ba4\u8bc1\u8fc7\u6ee4\u5668<br>\u2502 \u2514\u2500\u2500 CorsFilter.java # \u8de8\u57df\u8fc7\u6ee4\u5668<br>\u251c\u2500\u2500 model<br>\u2502 \u251c\u2500\u2500 User.java # \u7528\u6237\u5b9e\u4f53\u7c7b<br>\u2502 \u251c\u2500\u2500 Product.java # \u4ea7\u54c1\u5b9e\u4f53\u7c7b<br>\u2502 \u251c\u2500\u2500 Address.java # \u5730\u5740\u5b9e\u4f53\u7c7b<br>\u2502 \u2514\u2500\u2500 Order.java # \u8ba2\u5355\u5b9e\u4f53\u7c7b<br>\u251c\u2500\u2500 service<br>\u2502 \u251c\u2500\u2500 UserService.java # \u7528\u6237\u670d\u52a1\u63a5\u53e3<br>\u2502 \u251c\u2500\u2500 UserServiceImpl.java # \u7528\u6237\u670d\u52a1\u5b9e\u73b0<br>\u2502 \u251c\u2500\u2500 ProductService.java # \u4ea7\u54c1\u670d\u52a1\u63a5\u53e3<br>\u2502 \u251c\u2500\u2500 ProductServiceImpl.java # \u4ea7\u54c1\u670d\u52a1\u5b9e\u73b0<br>\u2502 \u2514\u2500\u2500 OrderService.java # \u8ba2\u5355\u670d\u52a1\u63a5\u53e3<br>\u251c\u2500\u2500 aop<br>\u2502 \u251c\u2500\u2500 LoggingAspect.java # \u65e5\u5fd7\u5207\u9762<br>\u2502 \u251c\u2500\u2500 TransactionAspect.java # \u4e8b\u52a1\u5207\u9762<br>\u2502 \u2514\u2500\u2500 ExceptionHandlingAspect.java # \u5f02\u5e38\u5904\u7406\u5207\u9762<br>\u251c\u2500\u2500 util<br>\u2502 \u251c\u2500\u2500 DateUtils.java # \u65e5\u671f\u5de5\u5177\u7c7b<br>\u2502 \u251c\u2500\u2500 StringUtils.java # \u5b57\u7b26\u4e32\u5de5\u5177\u7c7b<br>\u2502 \u251c\u2500\u2500 FileUtil.java # \u6587\u4ef6\u5de5\u5177\u7c7b<br>\u2502 \u251c\u2500\u2500 JsonUtil.java # JSON\u5de5\u5177\u7c7b<br>\u2502 \u2514\u2500\u2500 HttpUtil.java # HTTP\u5de5\u5177\u7c7b<br>\u251c\u2500\u2500 exception<br>\u2502 \u251c\u2500\u2500 CustomException.java # \u81ea\u5b9a\u4e49\u5f02\u5e38\u7c7b<br>\u2502 \u251c\u2500\u2500 GlobalExceptionHandler.java # \u5168\u5c40\u5f02\u5e38\u5904\u7406\u5668<br>\u2502 \u2514\u2500\u2500 ApiError.java # API\u9519\u8bef\u54cd\u5e94\u7c7b<br>\u251c\u2500\u2500 dto<br>\u2502 \u251c\u2500\u2500 UserDTO.java # \u7528\u6237\u6570\u636e\u4f20\u8f93\u5bf9\u8c61<br>\u2502 \u251c\u2500\u2500 ProductDTO.java # \u4ea7\u54c1\u6570\u636e\u4f20\u8f93\u5bf9\u8c61<br>\u2502 \u251c\u2500\u2500 AddressDTO.java # \u5730\u5740\u6570\u636e\u4f20\u8f93\u5bf9\u8c61<br>\u2502 \u2514\u2500\u2500 OrderDTO.java # \u8ba2\u5355\u6570\u636e\u4f20\u8f93\u5bf9\u8c61<br>\u251c\u2500\u2500 mapper<br>\u2502 \u251c\u2500\u2500 UserMapper.java # \u7528\u6237\u6620\u5c04\u5668<br>\u2502 \u251c\u2500\u2500 ProductMapper.java # \u4ea7\u54c1\u6620\u5c04\u5668<br>\u2502 \u2514\u2500\u2500 OrderMapper.java # \u8ba2\u5355\u6620\u5c04\u5668<br>\u251c\u2500\u2500 MyApplication.java # \u5e94\u7528\u4e3b\u542f\u52a8\u7c7b<br>\u2514\u2500\u2500 resources<br>\u251c\u2500\u2500 application.properties # \u5e94\u7528\u914d\u7f6e\u6587\u4ef6<br>\u251c\u2500\u2500 static # \u9759\u6001\u8d44\u6e90\u6587\u4ef6\u5939<br>\u2502 \u251c\u2500\u2500 css # CSS\u6587\u4ef6<br>\u2502 \u251c\u2500\u2500 js # JavaScript\u6587\u4ef6<br>\u2502 \u2514\u2500\u2500 images # \u56fe\u7247\u6587\u4ef6<br>\u251c\u2500\u2500 templates # Thymeleaf\u6a21\u677f\u6587\u4ef6\u5939<br>\u2514\u2500\u2500 logback-spring.xml # \u65e5\u5fd7\u914d\u7f6e\u6587\u4ef6<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8be6\u7ec6\u8bf4\u660e<\/h3>\n\n\n\n<ol start=\"1\">\n<li><strong>config<\/strong>\n<ul>\n<li><strong>DatabaseConfig.java <\/strong>: \u6570\u636e\u5e93\u914d\u7f6e\u7c7b\uff0c\u7528\u4e8e\u914d\u7f6e\u6570\u636e\u6e90\u3001JPA\u7b49\u3002<\/li>\n\n\n\n<li><strong>SecurityConfig.java <\/strong>: \u5b89\u5168\u914d\u7f6e\u7c7b\uff0c\u7528\u4e8e\u914d\u7f6eSpring Security\u3002<\/li>\n\n\n\n<li><strong>SwaggerConfig.java <\/strong>: Swagger\u914d\u7f6e\u7c7b\uff0c\u7528\u4e8e\u751f\u6210API\u6587\u6863\u3002<\/li>\n\n\n\n<li><strong>ApplicationProperties.java <\/strong>: \u5e94\u7528\u5c5e\u6027\u914d\u7f6e\u7c7b\uff0c\u7528\u4e8e\u52a0\u8f7d\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u5c5e\u6027\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>controller<\/strong>\n<ul>\n<li><strong>UserController.java <\/strong>: \u5904\u7406\u7528\u6237\u76f8\u5173\u7684HTTP\u8bf7\u6c42\u3002<\/li>\n\n\n\n<li><strong>ProductController.java <\/strong>: \u5904\u7406\u4ea7\u54c1\u76f8\u5173\u7684HTTP\u8bf7\u6c42\u3002<\/li>\n\n\n\n<li><strong>ErrorController.java <\/strong>: \u5904\u7406\u5168\u5c40\u9519\u8bef\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>dao<\/strong>\n<ul>\n<li><strong>UserRepository.java <\/strong>: \u7528\u6237\u7684JPA Repository\u63a5\u53e3\u3002<\/li>\n\n\n\n<li><strong>ProductRepository.java <\/strong>: \u4ea7\u54c1\u7684JPA Repository\u63a5\u53e3\u3002<\/li>\n\n\n\n<li><strong>CustomRepositoryImpl.java <\/strong>: \u81ea\u5b9a\u4e49Repository\u5b9e\u73b0\u7c7b\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>filter<\/strong>\n<ul>\n<li><strong>LoggingFilter.java <\/strong>: \u65e5\u5fd7\u8fc7\u6ee4\u5668\uff0c\u8bb0\u5f55\u8bf7\u6c42\u548c\u54cd\u5e94\u4fe1\u606f\u3002<\/li>\n\n\n\n<li><strong>AuthenticationFilter.java <\/strong>: \u8ba4\u8bc1\u8fc7\u6ee4\u5668\uff0c\u5904\u7406\u8ba4\u8bc1\u903b\u8f91\u3002<\/li>\n\n\n\n<li><strong>CorsFilter.java <\/strong>: \u8de8\u57df\u8fc7\u6ee4\u5668\uff0c\u5904\u7406\u8de8\u57df\u8bf7\u6c42\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>model<\/strong>\n<ul>\n<li><strong>User.java <\/strong>: \u7528\u6237\u5b9e\u4f53\u7c7b\uff0c\u5bf9\u5e94\u6570\u636e\u5e93\u4e2d\u7684\u7528\u6237\u8868\u3002<\/li>\n\n\n\n<li><strong>Product.java <\/strong>: \u4ea7\u54c1\u5b9e\u4f53\u7c7b\uff0c\u5bf9\u5e94\u6570\u636e\u5e93\u4e2d\u7684\u4ea7\u54c1\u8868\u3002<\/li>\n\n\n\n<li><strong>Address.java <\/strong>: \u5730\u5740\u5b9e\u4f53\u7c7b\uff0c\u5bf9\u5e94\u6570\u636e\u5e93\u4e2d\u7684\u5730\u5740\u8868\u3002<\/li>\n\n\n\n<li><strong>Order.java <\/strong>: \u8ba2\u5355\u5b9e\u4f53\u7c7b\uff0c\u5bf9\u5e94\u6570\u636e\u5e93\u4e2d\u7684\u8ba2\u5355\u8868\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>service<\/strong>\n<ul>\n<li><strong>UserService.java <\/strong>: \u7528\u6237\u670d\u52a1\u63a5\u53e3\uff0c\u5b9a\u4e49\u7528\u6237\u76f8\u5173\u7684\u4e1a\u52a1\u903b\u8f91\u3002<\/li>\n\n\n\n<li><strong>UserServiceImpl.java <\/strong>: \u7528\u6237\u670d\u52a1\u5b9e\u73b0\u7c7b\u3002<\/li>\n\n\n\n<li><strong>ProductService.java <\/strong>: \u4ea7\u54c1\u670d\u52a1\u63a5\u53e3\uff0c\u5b9a\u4e49\u4ea7\u54c1\u76f8\u5173\u7684\u4e1a\u52a1\u903b\u8f91\u3002<\/li>\n\n\n\n<li><strong>ProductServiceImpl.java <\/strong>: \u4ea7\u54c1\u670d\u52a1\u5b9e\u73b0\u7c7b\u3002<\/li>\n\n\n\n<li><strong>OrderService.java <\/strong>: \u8ba2\u5355\u670d\u52a1\u63a5\u53e3\uff0c\u5b9a\u4e49\u8ba2\u5355\u76f8\u5173\u7684\u4e1a\u52a1\u903b\u8f91\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>aop<\/strong>\n<ul>\n<li><strong>LoggingAspect.java <\/strong>: \u65e5\u5fd7\u5207\u9762\uff0c\u7528\u4e8e\u8bb0\u5f55\u65b9\u6cd5\u8c03\u7528\u65e5\u5fd7\u3002<\/li>\n\n\n\n<li><strong>TransactionAspect.java <\/strong>: \u4e8b\u52a1\u5207\u9762\uff0c\u7528\u4e8e\u7ba1\u7406\u4e8b\u52a1\u3002<\/li>\n\n\n\n<li><strong>ExceptionHandlingAspect.java <\/strong>: \u5f02\u5e38\u5904\u7406\u5207\u9762\uff0c\u7528\u4e8e\u7edf\u4e00\u5904\u7406\u5f02\u5e38\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>util<\/strong>\n<ul>\n<li><strong>DateUtils.java <\/strong>: \u65e5\u671f\u5de5\u5177\u7c7b\uff0c\u63d0\u4f9b\u65e5\u671f\u683c\u5f0f\u5316\u7b49\u529f\u80fd\u3002<\/li>\n\n\n\n<li><strong>StringUtils.java <\/strong>: \u5b57\u7b26\u4e32\u5de5\u5177\u7c7b\uff0c\u63d0\u4f9b\u5b57\u7b26\u4e32\u5904\u7406\u529f\u80fd\u3002<\/li>\n\n\n\n<li><strong>FileUtil.java <\/strong>: \u6587\u4ef6\u5de5\u5177\u7c7b\uff0c\u63d0\u4f9b\u6587\u4ef6\u64cd\u4f5c\u529f\u80fd\u3002<\/li>\n\n\n\n<li><strong>JsonUtil.java <\/strong>: JSON\u5de5\u5177\u7c7b\uff0c\u63d0\u4f9bJSON\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316\u529f\u80fd\u3002<\/li>\n\n\n\n<li><strong>HttpUtil.java <\/strong>: HTTP\u5de5\u5177\u7c7b\uff0c\u63d0\u4f9bHTTP\u8bf7\u6c42\u529f\u80fd\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>exception<\/strong>\n<ul>\n<li><strong>CustomException.java <\/strong>: \u81ea\u5b9a\u4e49\u5f02\u5e38\u7c7b\u3002<\/li>\n\n\n\n<li><strong>GlobalExceptionHandler.java <\/strong>: \u5168\u5c40\u5f02\u5e38\u5904\u7406\u5668\uff0c\u6355\u83b7\u5e76\u5904\u7406\u5f02\u5e38\u3002<\/li>\n\n\n\n<li><strong>ApiError.java <\/strong>: API\u9519\u8bef\u54cd\u5e94\u7c7b\uff0c\u5b9a\u4e49\u9519\u8bef\u54cd\u5e94\u7684\u683c\u5f0f\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>dto<\/strong>\n<ul>\n<li><strong>UserDTO.java <\/strong>: \u7528\u6237\u6570\u636e\u4f20\u8f93\u5bf9\u8c61\uff0c\u7528\u4e8e\u5728\u4e0d\u540c\u5c42\u4e4b\u95f4\u4f20\u9012\u7528\u6237\u6570\u636e\u3002<\/li>\n\n\n\n<li><strong>ProductDTO.java <\/strong>: \u4ea7\u54c1\u6570\u636e\u4f20\u8f93\u5bf9\u8c61\u3002<\/li>\n\n\n\n<li><strong>AddressDTO.java <\/strong>: \u5730\u5740\u6570\u636e\u4f20\u8f93\u5bf9\u8c61\u3002<\/li>\n\n\n\n<li><strong>OrderDTO.java <\/strong>: \u8ba2\u5355\u6570\u636e\u4f20\u8f93\u5bf9\u8c61\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>mapper<\/strong>\n<ul>\n<li><strong>UserMapper.java <\/strong>: \u7528\u6237\u6620\u5c04\u5668\uff0c\u7528\u4e8e\u5c06\u5b9e\u4f53\u7c7b\u4e0eDTO\u4e4b\u95f4\u7684\u8f6c\u6362\u3002<\/li>\n\n\n\n<li><strong>ProductMapper.java <\/strong>: \u4ea7\u54c1\u6620\u5c04\u5668\u3002<\/li>\n\n\n\n<li><strong>OrderMapper.java <\/strong>: \u8ba2\u5355\u6620\u5c04\u5668\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>MyApplication.java<\/strong>\n<ul>\n<li>\u5e94\u7528\u4e3b\u542f\u52a8\u7c7b\uff0c\u4f7f\u7528<code>@SpringBootApplication<\/code>\u6ce8\u89e3\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>resources<\/strong>\n<ul>\n<li><strong>application.properties <\/strong>: \u5e94\u7528\u914d\u7f6e\u6587\u4ef6\uff0c\u5305\u542b\u6570\u636e\u5e93\u8fde\u63a5\u3001\u670d\u52a1\u5668\u7aef\u53e3\u7b49\u914d\u7f6e\u3002<\/li>\n\n\n\n<li><strong>static <\/strong>: \u5b58\u653e\u9759\u6001\u8d44\u6e90\u6587\u4ef6\uff0c\u5982CSS\u3001JavaScript\u3001\u56fe\u7247\u7b49\u3002<\/li>\n\n\n\n<li><strong>templates <\/strong>: \u5b58\u653eThymeleaf\u6a21\u677f\u6587\u4ef6\u3002<\/li>\n\n\n\n<li><strong>logback-spring.xml <\/strong>: \u65e5\u5fd7\u914d\u7f6e\u6587\u4ef6\uff0c\u7528\u4e8e\u914d\u7f6e\u65e5\u5fd7\u8f93\u51fa\u683c\u5f0f\u548c\u7ea7\u522b\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>com.example.myap&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":832,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[217,218,219],"_links":{"self":[{"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/posts\/831"}],"collection":[{"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=831"}],"version-history":[{"count":1,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/posts\/831\/revisions"}],"predecessor-version":[{"id":833,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/posts\/831\/revisions\/833"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/media\/832"}],"wp:attachment":[{"href":"https:\/\/www.ikaros.love\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}