学习中遇到的一些java注解

                   java注解相关记录

前言:学习过程中遇到很多注解,初学过程会忘,所以谨在此记录一下,希望就可以加深印象和强化记忆。

什么是注解?(https://blog.csdn.net/weixin_43919632/article/details/94847685)
注解本质上是一个接口。

java自带的几个注解,叫元注解,元注解可以用来标识给其他注解


注解如何起作用?
注解通过反射生效,通过反射我们可以得到不管是类的所有注解,并且得到注解的值,根据这些值我们就可以进行相应的操作。

例如springboot里面中央调度器DispatcherServlet就是根据标注了注解@Controller的类找相应的处理器HandleServlet。

 

  1. @GeneratedValue:用于标注主键的生成策略,通过strategy属性指定。默认情况下,JPA自动选择一个最适合低层数据库的主键生成策略:分别是IDENTITY,AUTO,SEQUENCE,TABLE
  2. @Entity实体类,   @Column(name="LAST_NAME"),当实体的属性与其映射的数据库表的列不同名时需要使用
  3. @Basic 表示一个简单的属性到数据库字段的映射,对于没有任何标注的getXxxx()方法,默认即为@Basic,,fetch表示该属性的读取策略,有EAGER和LAZY两种。分别表示主支抓取和延迟加载,默认为EAGER。optional:表示该属性是否允许null,默认为true.
  4.  @Transient表示该属性并非一个到数据表的字段的映射,ORM框架将忽略该属性。
  5.  EntityManagerFactory:接口主要用来创建,约定了如下4个方法:

    1),CreateEntityManger():用于创建实体管理器对象实例。

     2),CreateEntityManger():用于创建实体管理器的对象实例的重载方法,Map参数用于提供EntityManager的属性。

     3),IsOpen():检查EntityManagerFactory是否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用close()方法将其关闭。

     4),Close():关闭EntityManagerFactory.关闭后将释放所有资源,isOpen方法测试

     5),Merage(T entity):merage()用于处理Entity的同步,即数据库的插入和更新操作。


1,事务
Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。

关于事务管理器,不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager 如果你添加的是 spring-boot-starter-jdbc 依赖,框架会默认注入 DataSourceTransactionManager 实例。如果你添加的是 spring-boot-starter-data-jpa 依赖,框架会默认注入 JpaTransactionManager 实例。

你可以在启动类中添加如下方法,Debug测试,就能知道自动注入的是 PlatformTransactionManager 接口的哪个实现类。
https://blog.csdn.net/u010963948/article/details/79208328
2
2-1、@Mapper注解:
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面

@Mapper
public interface UserDAO {
   //代码
}

如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan

2-2、@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,

@SpringBootApplication
@MapperScan("com.winter.dao")
public class SpringbootMybatisDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
    }
}

添加@MapperScan(“com.winter.dao”)注解以后,com.winter.dao包下面的接口类,在编译之后都会生成相应的实现类

https://blog.csdn.net/manchengpiaoxue/article/details/84937257
3.
@EnableDiscoveryClient和@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到改服务。
不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。

https://blog.csdn.net/zheng199172/article/details/82466139
4.
@SpringBootApplication注解介绍
SpringBootApplication注解标记当前类为SpringBoot的引导启动类

源码分析:
《===============================================
一.作用
@SpringBootApplication 是一个组合注释,用于快捷配置启动类

二.拆解
此注解相当于@SpringBootConfiguration和EnableAutoConfiguration,@ComponentScan的组合注解

三.解析
1.@SpringBootConfiguration
说明这是一个配置文件类,它会被@ComponentScan扫描到。进入@SpringBootConfiguration源码发现它相当于@Configuration。
  提到@Configuration就要提到他的搭档@Bean。使用这两个注解就可以创建一个简单的Spring配置类,可用来替代相应的xml配置文件。

2.@EnableAutoConfiguration
会自动扫描指定包下全部标有@Component的类,并注册成bean,当然包括@Component下的子注解:@Service,@Repository,@Controller;默认会扫描当前包和所有子包。

3.@ComponentScan
启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项:如:我们添加了spring-boot-starter-web的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC
======================================》

https://blog.csdn.net/fenlin88l/article/details/89402837
https://www.pianshen.com/article/43521712776/


5,
@FeignClient
SpringCloud 服务间互相调用 @FeignClient注解
SpringCloud搭建各种微服务之后,服务间通常存在相互调用的需求,SpringCloud提供了@FeignClient 注解非常优雅的解决了这个问题

https://www.cnblogs.com/zhaosq/p/11675639.html
https://blog.csdn.net/weixin_38912281/article/details/104538676

6.

@RequestMapping
Spring中,@RequestMapping方法是用于处理请求映射的。
从URL中传过来的请求,都会由@RequestMapping注解进行处理。

@RequestMapping可用于类或者方法上。
用于类上的注解,会被优先匹配。即URL请求中的注解会先匹配类上注解中的路径参数,之后才会进一步匹配方法上注解中的参数。
如果类上的注解未匹配,则不会进一步匹配方法中的参数。

@RequestMapping中的参数一共有六种,具体见:点一下;
其中最常见的是value和method,简单说一下。
value指定请求的地址;
method指定请求的类型,POST, GET, PUT, DELETE之类的。
https://blog.csdn.net/weixin_42474632/article/details/102850873

7
@Controller
表明这是Controller类
用户前端发起请求,中央调度器DispatcherServlet就会根据处理器映射器找到标注了@Controller注解的类,从而找到相应的处理器方法来处理请求。
@Controller:
定义控制器,它还允许自动检测定义在类路径下的组件并自动注册
8,
@RestController用在类上,标注类里面的所有方法不用被视图解析解析,而是直接返回数据。
该注解的源码:

可以看到该注解集成两个@Controller和@ReponseBody注解。表明该类就是一个接口类,不会被视图解析器解析,而是直接返回数据。

https://blog.csdn.net/weixin_43919632/article/details/94847685

8,@Autowired

@Autowired用法详解
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。在使用@Autowired之前,我们对一个bean配置起属性时,是这用用的

<property name="属性名" value=" 属性值"/>    
通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 引入了 @Autowired 注释
https://www.cnblogs.com/fnlingnzb-learner/p/9723834.html

9,
@PathVariable
@PathVariable注解的用法和作用
@PathVariable 映射 URL 绑定的占位符
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过

@PathVariable("xxx") 绑定到操作方法的入参中。

一般与@RequestMapping(method = RequestMethod.GET)一起使用

@RequestMapping("/getUserById/{name}")
    public User getUser(@PathVariable("name") String name){
        return userService.selectUser(name);
    }
 

若方法参数名称和需要绑定的uri中变量名称一致时,可以简写:

@RequestMapping("/getUser/{name}")
    public User getUser(@PathVariable String name){
        return userService.selectUser(name);
    }

https://www.cnblogs.com/chenxu1997/p/12712397.html

10
@RequestParam:
和注解@PathVariable作用一样,用于获取传入参数的值,如:index?id=1。@RequestParam(value = “id”, required = true)//参数必须要有

@Value:
读取配置文件的属性,作用在类的属性上,读出的数据赋值给属性,有@Value("KaTeX parse error: Expected 'EOF', got '#' at position 14: {}"),@Value("#̲{}"), 如:@Value(…{server.port}"),把yml文件的端口读出来

11,
@PostMapping
映射一个POST请求

Spring MVC新特性
提供了对Restful风格的支持

@GetMapping,处理get请求
@PostMapping,处理post请求
@PutMapping,处理put请求
@DeleteMapping,处理delete请求

https://blog.csdn.net/nangeali/article/details/82470201


1,
@NoArgsConstructor
注解在类上,为类提供一个无参的构造方法。,


@AllArgsConstructor
(1)注解在类上,为类提供一个全参的构造方法。
(2)默认生成的方法是 public 的,如果要修改方法修饰符可以设置 AccessLevel 的值。
@RequiredArgsConstructor
(1)注解在类上,会生成构造方法(可能带参数也可能不带参数)。


https://www.hangge.com/blog/cache/detail_2493.html


2,
在实体类的编写过程中,常常需要应用大量的get、set方法,需要写大量的重复代码,即有的工具有自动生成功能,当时也会使实体类中产生大量冗余代码,使得代码变,springboot为我们提供了相应注解可以解决这类问题----@Data
    接下来简明扼要的介绍一下@Data注解的功能与使用方法
    ## 注解功能
        1、@Data可以为类提供读写功能,从而不用写get、set方法。
        2、他还会为类提供 equals()、hashCode()、toString() 方法。
        ## 使用方法--一下仅提供idea的使用方法
        1、下安装lombok插件
    ![settings/plugins在插件库中搜索安装即可。](https://img-blog.csdnimg.cn/20190501112839630.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Jlbnh0MDUwOA==,size_16,color_FFFFFF,t_70)
    2、重启idea
    3、在maven库中添加依赖
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.10</version>
            </dependency>
    4、在实体类上添加@Data注解即可生效
原文链接:https://blog.csdn.net/pzq915981048/article/details/99086924


1,
@EnableCaching 
Spring Cache 使用 ---@Cacheable 注解

https://blog.csdn.net/zl_momomo/article/details/80403564

@Slf4j
如果不想每次都写private  final Logger logger = LoggerFactory.getLogger(XXX.class); 可以用注解 @Slf4j
https://www.jianshu.com/p/6e137ee836a1
https://blog.csdn.net/qq_26344609/article/details/78905845


@EnableRedisHttpSession原理简析
https://blog.csdn.net/thl666666/article/details/106418201/
https://blog.csdn.net/jsbylibo/article/details/106544932


Lombok之@ToString使用
@ToString?
在java.lang.Object中有个实例方法toString,这个方法的作用是一个对象的自我描述。在源码中有这样一句注释,It is recommended that all subclasses override this method.即推荐所有的子类重新该方法。因为该方法在Object中的实现是返回字符串——类名和该对象的hashCode用“@”符连接起来的字符串,不具有可读性。所以,需要重写该方法,使得该方法能够清楚地表述自己的每一个成员变量。现在,我们在已经创建的Student类,重写该方法。
https://blog.csdn.net/cauchy6317/article/details/102516039

 

 

@TableField(exist=false)注解加在bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值