注解总结,Java中的注解,springboot中的注解

注解总结

1、Junit

开始执行的方法:初始化资源,执行完之后的方法:释放资源
测试方法,必须是:公有、非静态、无参无返回值的
在一个类中,可以定义多个测试方法,每个测试方法可以单独运行,也可以整体运行(顺序:方法名升序)

Junit 4

注解说明
@Test测试方法
@Before用来修饰实例方法,在每个 @Test 之前被执行,可以有多个,按方法名 "降序" 依次执行
@After用来修饰实例方法,在每个 @Test 之前被执行,可以有多个,按方法名 "升序" 依次执行
@BeforeClass用于 "静态" 方法,在所有的 @Before 之前被执行,且只执行一次
@AfterClass用于 "静态" 方法,在所有的 @After 之前被执行,且只执行一次

Junit 5

注解说明
@Test测试方法
@BeforeEach用来修饰实例方法,在每个 @Test 之前被执行,可以有多个,按方法名 "降序" 依次执行
@AfterEach用来修饰实例方法,在每个 @Test 之前被执行,可以有多个,按方法名 "升序" 依次执行
@BeforeAll用于 "静态" 方法,在所有的 @BeforeEach 之前被执行,且只执行一次
@AfterAll用于 "静态" 方法,在所有的 @AfterEach 之前被执行,且只执行一次

2、Lombok

注解说明
@Settersetter 方法
@Gettergetter 方法
@Datasetter 和 getter 方法
@AllArgsConstructor全参构造器
@NoArgsConstructor无参构造器
@Slf4j日志对象

3、Mybatis

注解说明
@Param("rename")写在方法的参数列表上,起别名
@Insert("sql")
@Delete("sql")
@Update("sql")
@Select("sql")
@Results({...}) 配合 @Result 使用结果集封装
@One(select="类.方法")结果集封装
@Many(select="类.方法")结果集封装
@Result(id = true / false, property = "", javaType = .class,
column = "", one = @One(), many = @Many(), fetchType = FetchType.)
结果集封装
@CacheNamespace在 Mapper 接口中配置二级缓存
@Mapper使用在 mapper 层类(mapper 接口)上用于实例化 Bean
@MapperScan("com.zzw.mapper")如果想让每个接口都变成实现类,需要在每个接口类上加上 @Mapper 注解,太麻烦
在 Springboot 启动类上面添加 @MapperScan("com.zzw.mapper")
* fetchType = FetchType.LAZY     表示懒加载
* fetchType = FetchType.EAGER    表示立即加载
* fetchType = FetchType.DEFAULT  表示使用全局配置
public interface OrderMapper {
    @Select("select * from orders")
    @Results({
        @Result(id = true, column = "id", property = "id"),
        @Result(column = "ordertime", property = "ordertime"),
        @Result(column = "money", property = "money"),
        @Result(property = "user", javaType = User.class, column = "uid",
                one = @One(select = "com.lagou.mapper.UserMapper.findById", fetchType = FetchType.EAGER))
    })
    public List<Order> findAllWithUser();
}

image

4、Spring

4.1、IOC

控制反转:对象不再自己创建,而是直接向 Spring 要

image

注解说明
@Component使用在类上用于实例化 Bean
@Controller使用在 controler 层类上用于实例化 Bean
@Service使用在 service 层类上用于实例化 Bean
@Repository使用在 mapper 层类上用于实例化 Bean
@Mapper使用在 mapper 层类(mapper 接口)上用于实例化 Bean(Mybatis 的)
@Bean使用在方法上,标注将该方法的返回值存储到 Spring 容器中(如果当前方法需要参数,它会自动在容器中查找装配)
@Scope标注 Bean 的作用范围,singleton、prototype
@LazyBean 是否懒加载,Spring 会在使用这个对象的时候,进行对象的创建
@PostConstruct使用在方法上,标注该方法是 Bean 的初始化方法(Java 的)
@PreDestroy使用在方法上,标注该方法是 Bean 的销毁方法(Java 的)
* 在 Spring 中,对于 bean 支持五种作用范围

    - singleton        单例模式,即对象只创建一次,然后一直存在(默认)
                       容器初始化,对象创建;容器销毁,对象销毁
    - prototype        多例模式,即每次获取 bean 的时候,IOC 都给我们创建一个新对象
                       每一次调用 getBean 获取对象的时候,对象创建
                       对象销毁是由对象调用线程所在的垃圾回收期负责,Spring 不知道这个销毁的时间节点
- 面试
    - request          web 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中(一次请求)
    - session          web 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中(一次会话)
    - globalSession    用于分布式 web 开发中,创建的实例绑定全局 session 对象

1、构造方法
初始化之前 postProcessBeforeInitialization(BeanPostProcessor)
2、初始化 afterProperitesSet(InitializingBean)、init-method
初始化之后 postProcessAfterInitialization(BeanPostProcessor)
3、销毁 destroy(DisposableBean)、destroy-method

4.2、DI

依赖注入

注解说明
@Autowired使用在字段上用于根据类型依赖注入
@Qualifier结合 @Autowired 一起使用,用于根据名称进行依赖注入
@Resource相当于 @Autowired + @Qualifier,按照名称进行注入(Java 的)
@Value注入普通属性(8 + String)(注入配置文件)
@PropertySource("db.properties") + @Value("${jdbc.url}")用于加载 .properties 文件中的配置

4.3、AOP

面向切面

注解说明
@Component指定是组件
@Aspect指定这个组件是 AOP 的增强类
@Order设置增强类优先级
@Pointcut指定方法为切入点
@Before前置通知
@AfterReturning后置通知
@AfterThrowing异常通知
@After最终通知
@Around环绕通知
@EnableAspectJAutoProxy(proxyTargetClass = true)0 xml 配置,切面自动代理,AOP 自动生成代理对象
告知 Spring 基于注解进行 AOP 编程,默认 JDK 代理,true 为 CGLib 代理
Spring AOP 代理默认实现 JDK,Springboot A0P 代理默认实现 Cglib

通过一个表达式来确定 AOP 要增强的是哪个或者那些方法
语法结构:execution( [权限修饰符] [返回值类型] [类的全路径名] [方法名] [参数列表] )(权限修饰符可以省略)

'*'   一个或多个
'..'  零个或多个
execution(* com.zzw.dao.UserDaoImpl.add(..))  // 指定切点为 UserDaoImpl.add 方法                    execution: 执行、实施
execution(* com.zzw.dao.UserDaoImpl.*(..))    // 指定切点为 UserDaoImpl 所有的方法
execution(* com.zzw.dao.*.*(..))              // 指定切点为 dao 包下所有的类中的所有的方法
execution(* com.zzw.dao.*.add(..))            // 指定切点为 dao 包下所有的类中的 add 的方法
execution(* com.zzw.dao.*.add*(..))           // 指定切点为 dao 包下所有的类中的 add 开头的方法
execution(* *(..))                            // 所有的方法
- 前置通知(before)             在切点运行 "之前" 执行
- 后置通知(after-returning)    在切点正常运行结束 "之后" 执行
- 异常通知(after-throwing)     在切点 "发生异常" 的时候执行
- 最终通知(after)              在切点的 "最终" 执行
try {
    前置通知(before)

    // 切点执行的位置

    后置通知(after-returning)
} catch (Exception e) {
    异常通知(after-throwing)
} finally {
    最终通知(after)
}
try {
    begin();             // 开启事务

    obj = pjp.proceed(); // 切点执行的位置

    commit();            // 提交事务
} catch (Throwable e) {
    rollback();          // 回滚事务
} finally {
    close();             // 关闭事务
}
return obj;

4.4、事务

Spring 事务

注解说明
@Transactional加在类上,代表类中的所有方法都添加了事务控制
放在方法上,就是仅仅对当前方法增加了事务控制
@EnableTransactionManagement开启事务注解

4.5、配置

注解说明
@Configuration用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
@Import(DbConfig.class)用于导入其他配置类
@ComponentScan("com.itheima")用于指定 Spring 在初始化容器时要扫描的包
@Bean使用在方法上,标注将该方法的返回值存储到 Spring 容器中
如果当前方法需要参数,它会自动在容器中查找装配
@PropertySource("db.properties") + @Value("${jdbc.url}")
@PropertySource("classpath:jdbc.properties")
用于加载 .properties 文件中的配置
@Configuration
@Import(DbConfig.class)
@ComponentScan("com.zzw")
public class SpringConfig {

    @Bean // @Bean 还相当于 @AutoWired 标注一个方法上, 也就是说如果当前方法需要参数, 它会自动在容器中查找装配
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
}

ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
@PropertySource("db.properties")
public class DbConfig {

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}
# db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///spring
jdbc.username=root
jdbc.password=root

5、SpringMVC

文件上传、异常处理、拦截器

注解说明
@Controller标注类作为控制器(处理器)
@RequestMapping用于建立请求 URL 和处理请求方法之间的对应关系,路径、方法、参数、请求头
@PostMapping、@DeleteMapping、@PutMapping、@GetMapping对请求方式进行控制,增删改查
@CrossOrigin(origins = {"http://localhost:3000"})允许跨域
--------------------------------------------------------------------------------------------------------------------
@PathVariable可以获取请求 URL 路径中的参数值,Restful 风格
@RequestParam处理参数名称,默认值、非必须、接收 List
@RequestBody标注在参数前面,用于将请求体(get 没有请求体)中的 Json 数据转换成指定的对象
如果没有具体的实体类来接收参数,就要用 Map 来接收
@RequestHeader接收请求头,Map<String, String> headers 获取所有请求头、获取指定键的请求头
@CookieValue("JSESSIONID")获取 Cookie 中的数据
@DateTimeFormat(pattern = "yyyy-MM-dd")日期类型转换,可以用于方法参数列表和类的属性上(入参)
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")处理响应 Json 数据的处理,可以用于方法参数列表和类的属性上(出参)
@ResponseBody标注在方法或者类上,表示将方法返回值对象转换成指定的形式(Json / 字符串),直接写回响应
@RestController = @Controller + @Responsebody返回 Json 数据,不需要在方法前面加 @ResponseBody 注解了
@SessionAttributes("username")向 request 域存入的 key 为 username 时,同步到 session 域中
--------------------------------------------------------------------------------------------------------------------
@ControllerAdvice要标注在类上,表示当前类是一个全局异常处理器的类
@RestControllerAdvice要标注在类上,表示当前类是一个全局异常处理器的类,方法返回值自动转 Json
@ExceptionHandler(Throwable.class)标注在方法上,表示当前方法可以处理哪些异常

6、Springboot

注解说明
@SpringBootApplication启动类
@SpringBootTest(classes=SpringbootApplication.class)测试类
@Configuration(proxyBeanMethods = true)配置类
@ConfigurationProperties(prefix = "datasource")读取配置文件信息,来给被标注的类的属性赋值,当前类必须放到容器中才生效

参考文献:注解总结 - lidongdongdong~ - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/483399.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XUbuntu22.04之安装Plantuml(二百二十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

llvm后端

SelectionDAGBuilder是LLVM&#xff08;Low Level Virtual Machine&#xff09;编译器中的一个重要组件&#xff0c;它负责将LLVM中间表示&#xff08;Intermediate Representation&#xff0c;IR&#xff09;转换为SelectionDAG&#xff08;选择有向无环图&#xff09;的形式。…

Nacos部署(四)Docker部署Nacos2.3.x集群环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Nacos部署&#xff08;四&#xff09;Docker部署Nacos2.3.x集群环境 ⏱…

adams卸载与安装

adams 卸载后重新安装lnstaller could not read the log directory of the existing installerto backup and restore.Installer will now exit. ADAMS软件卸载安装【adams吧】_百度贴吧 (baidu.com)

阿里云OSS存储的视频如何加水印

OSS是不能进行视频添加水印的&#xff0c;可以图片添加水印。 您可以在视频点播中进行配置&#xff1a; https://help.aliyun.com/zh/vod/user-guide/video-watermarks?spma2c4g.11186623.0.i2 原来的业务代码都是使用python 对oss的 视频进行上传 的,上传的视频路径已经保存到…

提高效率与寿命:坚持正确的码垛机器人操作流程

在工业生产中&#xff0c;码垛机器人以其提升效率、减少损耗、降低成本等优势&#xff0c;成为众多行业不可或缺的重要设备。然而&#xff0c;与所有精密机械一样&#xff0c;码垛机器人的使用寿命很大程度上取决于正确的操作流程。科学规范的操作不仅保障生产顺利进行&#xf…

关于 Microsoft Visual Studio

关于 Microsoft Visual Studio References References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

EPO企业生产运营数智化平台助力制造企业迈向智能制造

随着“中国制造2025”和工业4.0的不断推进&#xff0c;越来越多的制造企业准备迈入智能制造和智慧制造领域&#xff0c;实现数智化管理。企业通过搭建EPO企业生产运营平台&#xff0c;结合自身业务现状和数字化需求&#xff0c;从各个业务场景、部门人员、产品组成等方面进行分…

XSS一-WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

演示案例&#xff1a; XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM #XSS跨站-输入输出-原理&分类&闭合 漏洞原理&#xff1a;接受输入数据&#xff0c;输出显示数据后解析执行 基础类型&#xff1a;反射(非持续)&#xff0c;存储(…

内网渗透(二)必须了解Windows域环境

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、Windows域环境简介 Windows域是计算机网络的一种形式…

鸿蒙一次开发,多端部署(十二)资源使用

在页面开发过程中&#xff0c;经常需要用到颜色、字体、间距、图片等资源&#xff0c;在不同的设备或配置中&#xff0c;这些资源的值可能不同。有两种方式处理&#xff1a; 应用资源&#xff1a;借助资源文件能力&#xff0c;开发者在应用中自定义资源&#xff0c;自行管理这些…

知识管理入门:轻松选择合适的知识管理软件

你是不是经常觉得自己的大脑像个杂乱的仓库&#xff0c;各种信息、知识和想法在里面乱窜&#xff0c;找不到头绪&#xff1f;别担心&#xff0c;知识管理软件来帮你解决这个问题啦&#xff01;今天&#xff0c;我们就来聊聊知识管理软件这个神奇的工具&#xff0c;新手也能轻松…

MongoDB知识

1、部署MongoDB &#xff08;1&#xff09;new好一个mongo文件之后执行 &#xff08;出现mongodb.key&#xff09;记得放行端口 openssl rand -base64 666 > mongodb.key &#xff08;2&#xff09;放到一个docker-compose.yml之后docker-compose up -d执行 version: 3.…

网络安全实训Day11

写在前面 IPSec来喽。有时候把xmind直接粘贴过来会有顺序错位的情况&#xff0c;又被气晕 网络安全实训-网络安全技术 IPSec VPN IPSec 用于保障IP协议安全性的技术 相关概念 工作模式 传输模式&#xff1a;只对数据提供安全保护&#xff0c;不封装公网头部 隧道模式&#…

leetcode 239.滑动窗口最大值

题目 思路 这是单调队列的经典题目。 最基本思路就是&#xff08;拿窗口大小为3说明&#xff09;&#xff1a; 从队列中已经有三个元素开始。先要pop掉第一个元素&#xff0c;然后再push进新的元素&#xff0c;最后返回这三个元素中最大的那一个。 pop和push操作都很简单&a…

正弦实时数据库(SinRTDB)的部署架构

为了适应各种类型的项目需求&#xff0c;正弦实时数据库支持单机部署、双主高可用集群部署、混合部署模式&#xff0c;各部署模式的特点如下&#xff1a; 单机部署 应用于风力发电、光伏、火电 等厂、站级监控系统。支持组态、实时计算、报警服务、报表统计等业务。 双主高可…

jmeter断言使用方法

断言主流的有两种&#xff1a;响应断言、JSON断言 响应断言 1、http请求添加响应断言 2、三种作用域&#xff1a;第一种既作用主请求又作用子请求、只作用主请求、只作用子请求。我们默认选中间的仅作用主请求即可。 3、测试字段和匹配规则 测试字段一般选择响应文本即可&am…

由浅到深认识Java语言(11):封装

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

mac vscode 命令行启动命令安装 别名设置方法

vscode 给我们提供了一个从命令行启动并打开vscode编辑器的shell脚本&#xff0c; 如 在vscode中打开当前文件夹&#xff0c;可以执行 code . 即可。 code命令安装方法&#xff1a; 打开vscode 使用 ctrl shift p 快捷键打开命令行窗口&#xff0c; 然后输入 shell comman…

人工智能之Tensorflow批标准化

批标准化&#xff08;Batch Normalization,BN&#xff09;是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深&#xff0c;训练会越来越困难&#xff0c;收敛速度会很慢&#xff0c;常常会导致梯度消失问题。梯度消失问题是在神经网络中&#xff0c;当前…