Merge pull request '1.6' (#7) from cyj into main

main
pvtfxms7o 2 months ago
commit 6840647be8

@ -10,7 +10,6 @@
package com.yami.shop.admin; package com.yami.shop.admin;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -21,15 +20,28 @@ import org.springframework.context.annotation.ComponentScan;
/** /**
* @author lgh * @author lgh
* Spring BootWeb
*/ */
@SpringBootApplication @SpringBootApplication
// @SpringBootApplication注解是一个组合注解相当于同时使用了@Configuration、@EnableAutoConfiguration和@ComponentScan
// 它表明这个类是一个Spring Boot应用的配置类并且开启自动配置以及组件扫描功能。
@ComponentScan("com.yami.shop") @ComponentScan("com.yami.shop")
public class WebApplication extends SpringBootServletInitializer{ // @ComponentScan注解用于指定Spring要扫描的基础包路径在这里表示会扫描com.yami.shop及其子包下的所有组件比如@Component、@Service、@Repository等标注的类
// 以便将这些组件纳入Spring容器进行管理。
public class WebApplication extends SpringBootServletInitializer {
/**
* JavaSpring BootWebApplication.classargs
* Spring BootWebWeb
*/
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args); SpringApplication.run(WebApplication.class, args);
} }
/**
* WARServletTomcatSpring
* SpringApplicationBuilderWebApplication.class便
*/
@Override @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(WebApplication.class); return builder.sources(WebApplication.class);

@ -8,26 +8,35 @@
* *
*/ */
// 声明该类所在的包名在Java中包用于对类进行组织和分类管理方便代码的模块化以及避免类名冲突等问题。
package com.yami.shop.api; package com.yami.shop.api;
// 引入Spring Boot相关的核心注解用于标记这是一个Spring Boot应用程序它会开启Spring Boot的自动配置等一系列功能简化Spring应用的搭建和部署流程。
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
// 用于以编程方式构建Spring Boot应用程序特别是在需要对应用的启动配置等进行更多定制化操作时会用到比如配置应用的启动类、配置文件等信息。
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;
// Spring Boot提供的一个用于支持将Spring Boot应用部署为Web应用例如部署到Servlet容器中的基础类通常需要继承它来做相关的适配和初始化工作。
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
// 用于指定Spring需要扫描的组件所在的基础包路径Spring会在这些包及其子包下查找带有相关注解如 @Component、@Service等的类并将它们注册为Spring容器中的组件便于进行依赖注入等操作。
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
/** /**
* @author lgh * @author lgh
* APISpring BootServlet
*/ */
@SpringBootApplication @SpringBootApplication
// 通过 @ComponentScan 注解指定Spring要扫描的基础包路径为 "com.yami.shop"意味着Spring会在这个包及其子包下查找并注册各种Spring组件如控制器、服务类、数据访问层等到Spring容器中以便进行后续的依赖注入和业务逻辑处理。
@ComponentScan(basePackages = {"com.yami.shop"}) @ComponentScan(basePackages = {"com.yami.shop"})
public class ApiApplication extends SpringBootServletInitializer{ public class ApiApplication extends SpringBootServletInitializer {
// 应用的主入口方法Java应用程序从这个方法开始执行。当运行这个类的 main 方法时会启动Spring Boot应用加载配置、初始化Spring容器并启动相关的Web服务等如果是Web应用的话
public static void main(String[] args) { public static void main(String[] args) {
// 使用SpringApplication类的静态方法 run 来启动Spring Boot应用传入当前启动类ApiApplication.class以及命令行参数 argsSpring Boot会根据配置自动完成一系列的初始化和启动操作。
SpringApplication.run(ApiApplication.class, args); SpringApplication.run(ApiApplication.class, args);
} }
// 重写SpringBootServletInitializer类中的configure方法用于配置Spring Boot应用在Servlet容器中的启动方式这里返回一个SpringApplicationBuilder对象并指定应用的启动类为ApiApplication.class以便在Servlet容器中正确地启动Spring Boot应用。
@Override @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(ApiApplication.class); return builder.sources(ApiApplication.class);

@ -8,25 +8,41 @@
* *
*/ */
// 声明该类所在的包名,表明这个类属于 `com.yami.shop.bean` 包在Java项目中包用于对类进行分类组织方便代码管理和避免类名冲突等情况。
package com.yami.shop.bean; package com.yami.shop.bean;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
// 导入 `SmsInfoBo` 类从类名推测它是与短信信息相关的业务对象Business Object这个类应该包含了短信相关的各种属性以及对应的业务逻辑所需要的数据结构会在本类中用于存储和操作短信相关的信息。
import com.yami.shop.bean.bo.SmsInfoBo; import com.yami.shop.bean.bo.SmsInfoBo;
// 导入 `hutool` 工具库中用于集合操作的工具类 `CollectionUtil`,它提供了许多便捷的方法来处理集合相关的常见操作,例如判断集合是否为空、对集合进行合并、拆分等操作,在这里主要用于判断短信信息列表是否为空的情况。
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
/** /**
* @author lanhai * @author lanhai
* `SmsInfoContext` `ThreadLocal` 线线 `SmsInfoBo`
* 便线线
*/ */
public class SmsInfoContext { public class SmsInfoContext {
/** The request holder. */ /**
* The request holder.
* `ThreadLocal` `smsInfoHolder`线 `List<SmsInfoBo>`
* `ThreadLocal` 线线 `smsInfoHolder` 访
* 线线
*/
private static ThreadLocal<List<SmsInfoBo>> smsInfoHolder = new ThreadLocal<List<SmsInfoBo>>(); private static ThreadLocal<List<SmsInfoBo>> smsInfoHolder = new ThreadLocal<List<SmsInfoBo>>();
/**
public static List<SmsInfoBo> get(){ * 线
* `smsInfoHolder.get()` 线使 `CollectionUtil.isEmpty(list)`
* 线 `ArrayList`使
* 线 `smsInfoHolder` 便
*
* @return 线线
*/
public static List<SmsInfoBo> get() {
List<SmsInfoBo> list = smsInfoHolder.get(); List<SmsInfoBo> list = smsInfoHolder.get();
if (CollectionUtil.isEmpty(list)) { if (CollectionUtil.isEmpty(list)) {
return new ArrayList<>(); return new ArrayList<>();
@ -34,11 +50,26 @@ public class SmsInfoContext {
return smsInfoHolder.get(); return smsInfoHolder.get();
} }
public static void set(List<SmsInfoBo> smsInfoBos){ /**
* 线
* `List<SmsInfoBo>` `smsInfoBos` `smsInfoHolder.set(smsInfoBos)` 线 `ThreadLocal`
* 线 `get` 便线使
*
* @param smsInfoBos 线
*/
public static void set(List<SmsInfoBo> smsInfoBos) {
smsInfoHolder.set(smsInfoBos); smsInfoHolder.set(smsInfoBos);
} }
public static void put(SmsInfoBo smsInfoBo){ /**
* 线`SmsInfoBo`
* `smsInfoHolder.get()` 线使 `CollectionUtil.isEmpty(smsInfoBos)`
* 线 `ArrayList` `smsInfoBo`
* `smsInfoHolder.set(smsInfoBos)` 线 `ThreadLocal` 线便
*
* @param smsInfoBo 线
*/
public static void put(SmsInfoBo smsInfoBo) {
List<SmsInfoBo> smsInfoBos = smsInfoHolder.get(); List<SmsInfoBo> smsInfoBos = smsInfoHolder.get();
if (CollectionUtil.isEmpty(smsInfoBos)) { if (CollectionUtil.isEmpty(smsInfoBos)) {
smsInfoBos = new ArrayList<>(); smsInfoBos = new ArrayList<>();
@ -47,8 +78,13 @@ public class SmsInfoContext {
smsInfoHolder.set(smsInfoBos); smsInfoHolder.set(smsInfoBos);
} }
/**
* 线
* `smsInfoHolder.get()` 线 `null` `null` `smsInfoHolder.remove()` 线 `ThreadLocal`
* 线 `get` 线
*/
public static void clean() { public static void clean() {
if (smsInfoHolder.get() != null) { if (smsInfoHolder.get()!= null) {
smsInfoHolder.remove(); smsInfoHolder.remove();
} }
} }

Loading…
Cancel
Save