手写启动类(start)

为什么要手写一个start?

简化代码,仅使用一个注解就可以实现分页功能(以下以分页为例)。

1.定义一个pageX注解


@Documented
@Retention(RetentionPolicy.RUNTIME)//运行时可以通过反射API获取到注解信息
@Target({ElementType.METHOD, ElementType.TYPE})//该注解作用的范围,接口、类、方法
public @interface PageX {
}

2.对这个注解进行增强,PageXAop

@Component
@Aspect
public class PageXAOP {
    //定义切点
    @Pointcut("@annotation(com.by.core.annocations.PageX)")
    public void point(){}
    //环绕通知
    @Around("point()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("方法执行前");
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request=((ServletRequestAttributes)requestAttributes).getRequest();
        String pageNum = request.getParameter("pageNum");
        String pageSize = request.getParameter("pageSize");
        if (ObjectUtil.isNotEmpty(pageNum) && ObjectUtil.isNotEmpty("pageSize")){
            PageHelper.startPage(Integer.parseInt(pageNum),Integer.parseInt(pageSize));
        }
        Object result = pjp.proceed();//执行方法
        System.out.println("方法执行后");
       return result;
    }
}

3、定义统一返回格式,ResponseDTO。

/*
 * Copyright (c) 2020, 2024,  All rights reserved.
 *
 */
package cn.scl.model.dto;
 
import lombok.Data;
 

@Data
public class ResponseDTO {
    private int code ; //0为请求成功,非0为请求失败
    private String message; //返回的信息
    private Object data; //返回的数据
 
    //请求成功调用方法
    public static ResponseDTO success(Object data){
        ResponseDTO responseDTO = new ResponseDTO();
        responseDTO.setCode(0);
        responseDTO.setData(data);
        return responseDTO;
    }
    //请求失败调用方法
    public static ResponseDTO error(int code,String message){
        ResponseDTO responseDTO = new ResponseDTO();
        responseDTO.setCode(code);
        responseDTO.setMessage(message);
        return responseDTO;
    }
}

4、统一对controller进行处理,MyResponseAdvice。

@RestControllerAdvice
public class MyResponseAdvice implements ResponseBodyAdvice<Object> {
    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
        return true;
    }
  @ExceptionHandler(Exception.class)
  public Object handleException(Exception e){
        e.printStackTrace();
        if (e instanceof BziException){
            BziException bziException = (BziException) e;
            return ResponseDTO.error(bziException.getCode(),bziException.getMsg());
        }
        return ResponseDTO.error(501,e.getMessage());
  }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
       ResponseDTO dto = ResponseDTO.success(body);
       if (body instanceof  ResponseDTO){
           return body;
       }
       if (body instanceof Page){
           Page page=(Page) body;
           long total = page.getTotal();
           HashMap<String,Object> map=new HashMap<>();
           map.put("total",total);
           map.put("item",body);
           dto = ResponseDTO.success(map);
       }
        LocalUserUtil.remove();//撕掉标签
       if( aClass == StringHttpMessageConverter.class){
           return JSONUtil.toJsonStr(dto);
       }
        return dto;
    }
}

5、定义一个属性类,用来是否开启注解,PageXProperties。

@Data
@ConfigurationProperties(prefix = "com.by.pagex")
@EnableAutoConfiguration
public class PageXProperties {
    private boolean enable=true;
}

6、将需要装配配的类集中起来,自动装配时只需扫描这一个类即可,PageXAutoConfiguration。

@Configuration
@Import({PageXAOP.class, MyResponseAdvice.class})
@ConditionalOnProperty(prefix = "com.by.pagex",value ="enable",havingValue = "true",matchIfMissing = true)
public class PageXAutoConfiguration {

}

7、开启自动装配,在resource目录下新建,META-INF/spring.factories文件。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.by.pagex.autoconfiguration.PageXAutoConfiguration

8.如何打包发布??

目的:可以把我们书写的jar包发布到maven私有仓库,简称私仓

1. 打开云效

2.点击 非生产库-snapshotmave release仓库与snapshot仓库区别?

在软件开发中,"Maven release 仓库"和"Maven snapshot 仓库"是两种不同的仓库类型,用于存储Maven构建的软件包。

Maven Release 仓库:

Maven Release 仓库用于存储稳定版本的软件包,这些版本经过测试并且在生产环境中使用。当项目开发到一个稳定的版本时,开发人员可以创建一个发布版本并将其上传到 Maven Release 仓库。这些版本具有固定的版本号,并且不会被覆盖或修改。开发人员和其他用户可以通过指定这些稳定的版本号来下载和使用软件包,以确保他们获取的是稳定且经过验证的代码。

Maven Snapshot 仓库:

Maven Snapshot 仓库用于存储开发中的版本或快照版本的软件包。这些版本在开发过程中可能经常变化,并且不稳定。开发人员可以将项目的最新代码以快照版本的形式部署到 Maven Snapshot 仓库中。快照版本具有动态的版本号,通常带有时间戳或其他唯一标识符,以区别于稳定版本。快照版本可以方便地进行测试和共享,但不适合在生产环境中使用,因为它们可能包含未解决的问题或经过充分验证的代码。

这两种仓库的区别在于稳定版本和开发版本之间的区别,以及用途和用例。 Maven Release 仓库用于存储稳定版本,而 Maven Snapshot 仓库则用于存储开发中的快照版本。

3.根据如下步骤,下载setting.xml文件 

4.将下载文件放置到 C:\Users\你的用户名\.m2 如下位置,如果你之前有settings.xml文件,请先提前备份. 

5. 双击 deploy 就可以发布到私仓

在私仓就可以看到了对应的jar包,别人就可以直接使用了。

<dependency>
  <groupId>com.by</groupId>
  <artifactId>zhy-pagex-spring-boot-start</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</dependency>

6.如果要想把源码也打包进去,需要maven-source-plugin插件

 <plugin>
         <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
           <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
           </executions>
</plugin>

再次打包,你会看到私仓多出-source.jar , 别人在使用的时候,可以下载源码查看

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Yolov8数字分类案例是一个使用Yolov8算法来识别和分类数字的实际应用案例。Yolov8是一种基于深度学习的物体检测算法,其可以实现快速高效地检测和分类不同类型的物体。 在数字分类案例中,首先需要准备一个足够大规模的数字数据集,包含大量的数字图像样本。这些图像样本需要经过标注,即给出每个图像所代表的具体数字。然后,将这个数据集用于训练Yolov8模型,以使其能够学习和理解不同数字图像的特征和模式。 训练完成后,我们就可以使用训练好的Yolov8模型来对新的数字图像进行分类了。具体的分类过程是,将待分类的数字图像输入Yolov8模型中,模型会对图像进行像素级别的分析和处理,并最终给出一个代表该数字的分类结果。这个分类结果通常是一个数字,表示图像中所显示的数字是多少。 同时,为了提高数字分类的准确性和性能,我们还可以进行一系列的优化和改进。例如,可以进行数据增强操作,通过在训练过程中对图像应用一定的变换和扭曲,以增加模型对于不同变形数字的识别能力。此外,还可以进行超参数调整、模型结构改进等操作,以进一步提升Yolov8模型的性能和泛化能力。 综上所述,Yolov8数字分类案例通过运用Yolov8算法实现了对数字图像的高效分类和识别。该案例不仅提供了一个实际应用场景,还展示了深度学习算法在图像识别领域的强大能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值