Java的一些常用注解及其作用

这篇具有很好参考价值的文章主要介绍了Java的一些常用注解及其作用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Spring Bean类的注解

1.1 @Component

通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。

1.2 @Repository

对应持久层即 Dao 层,主要用于数据库相关操作。

1.3 @Service

对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。

1.4 @Controller

对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。

1.5@RestController

@RestController = @Controller + @ResponseBody

写这一个注解就相当于写了后面的两个注解,在返回值是json串的非常方便,但同时也会有一个问题,加了这个注解就不能返回jsp或者html页面,这时可以通过返回视图数据的方式来返回页面。

ModelAndView mv = new ModelAndView("index"); 
return mv;

1.6 @Configuration

一般用来声明配置类。

指示一个类声明一个或多个@Bean方法,并且可以由Spring容器处理,以便在运行时为这些bean生成BeanDefinition和服务请求。

@Configuration
public class AppConfig {
    @Bean
    public MyBean myBean() {
        // instantiate, configure and return bean ...
    }
}

注意:

1.@Configuration不可以是final类型;

2.@Configuration不可以是匿名类;

3.嵌套的configuration必须是静态类。

2、注入数据注解

2.1 @Autowired

自动按照类型注入,只要容器中有唯一一个 bean 对象类型和要注入的变量类型匹配,就可以注入成功。

如果有多个类型匹配,先匹配类型,然后根据变量名称去对应,如果变量名称和 bean 名称相同,就注入。

2.2 @Resource

byName就是变量名去匹配bean的id属性,而byType则是变量类型去匹配bean的class属性。

<bean id="userService" class="com.test.UserServiceImpl">
</bean> 

@Autowired和@Resource的区别:

  1. @Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的;
  2. @Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入;
  3. @Autowired注解注入的对象需要在IOC容器中存在,否则需要加上属性required=false,表示忽略当 前要注入的bean,如果有直接注入,没有跳过,不会报错。

2.3 @Value

用于注入基本类型和 String 类型的数据。

3、请求常用注解

3.1 @RequestMapping

它用于映射客户端的访问地址,可以被应用于类和方法上面。

可以指定请求的类型get,post,put,delete

@Controller
@RequestMapping("/index")
public class HelloWorldController {
  @RequestMapping(value = "/hello", method = RequestMethod.GET)
  public String hello() {
    return "/WEB-INF/views/success.jsp";
  }
  @RequestMapping(value = "/world", method = RequestMethod.POST)
  public String world() {
    return "/WEB-INF/views/success.jsp";
  }
}

@RequestMapping 还可以将多个请求映射到一个方法上,只需要给 value 来指定一个包含多个路径的列表。

@Controller
@RequestMapping("/index")
public class HelloWorldController {
  @RequestMapping(value = {"/hello", "/world", "/helloworld"})
  public String hello() {
    return "/WEB-INF/views/success.jsp";
  }
}

3.2 @GetMapping

等价于@RequestMapping(value="",method=RequestMethod.GET)

3.3 @PostMapping

等价于@RequestMapping(value="",method=RequestMethod.POST)

3.4 @PutMapping(value="/users/{userId}")

等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)

3.5 @DeleteMapping("/users/{userId}")

等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)

4、前后端传值

4.1 @PathVariable

用于获取路径参数,通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中。

RequestMapping("user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress){
//can do something;
}

4.2 @RequestParam

用于controller层,是Spring的注解,用于获取查询参数,解决前台参数名称与后台接收参数变量名称不一致的问题。

public String login(@RequestParam(value = "username") final String username,
                    @RequestParam(value = "password",required = false) final String password,
                    @RequestParam(value = "valcode",required = false) final String valcode) {
                    }  

  1. value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的name为username的参数的值将传入;
  2. required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
  3. defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties['java.vm.version']}”。

4.3 @Param

用于dao层,是mybatis中的注解。

使得mapper.xml中的参数与后台的参数对应上,也增强了可读性。

如果两者参数名一致得话,spring会自动进行封装,不一致的时候就需要手动去使其对应上。 即:用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 。

List<Employee> getAllEmployeeByPage(@Param("page") Integer page, 
                                    @Param("size") Integer size);

5、表相关注解

5.1 @Entity

声明一个类对应一个数据库实体。

@Entity说明这个class是实体类,并且使用默认的orm规则,即class名就是数据库表中表明,class字段名即表中字段名。@Entity注解指明这是一个实体Bean。在项目启动时会根据该类自动生成一张表,表的名称即@Entity注解中name的值,如果不配置name,默认表明为类名所有的实体类都要有主键,@Id注解表示该属性是一个主键,@GeneratedValue注解表示注解自动生成,strategy则表示主键的生成策略。

@Data
@Entity(name = "t_book")
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "book_name")
    private String name;
    @Column(name = "book_author")
    private String author;
    private Float price;
    @Transient
    private String description;
}

5.2 @Table

@Table注解默认情况下只会完成表和实体之间的映射,声明才对象映射到数据库的数据表,通过它可以为实体指定表(table)。

常用属性:name 指定表 @Table(name = "book")

@Data
@Table(name="book")
public class Book{
    @Id
    private Integer id;
    @Column(name="book_name")
    private String name;
    ...
}

5.3 @Id

声明一个字段为主键。所有的实体类都要有主键,@Id注解表示该属性是一个主键。

5.4 @Column

声明字段,可以设置字段的属性,字段名、是否为空。

生成的表中字段的名称就是实体类中属性的名称,通过@Column注解可以定制生成的字段属性,name表示该属性对应的数据表中字段的名称,nullable表示该字段非空。

5.5 @Transient

声明不需要与数据库映射的字段,在保存的时候不需要保存进数据库。

@Transient注解表示在生成数据库中的表时,该属性被忽略,即不生成对应的字段。

6、事务注解@Transactional

@Transactional(rollbackFor = Exception.class)  //这里回滚进行定义
public int update(Prdtv prdtv) throws RuntimeException{
    //注意在这里处理业务时,不要使用Try ...异常捕获,否则不回滚
    return prdtvMapper.update(prdtv);
}

@Transactional:事务注解,注解一般用在可以作用在类或者方法上

1.类上,表明类中所有 public 方法都启用事务 2.方法上,最常用的一种 3.接口上,不推荐使用

@Transactional注解只能在抛出RuntimeException或者Error时才会触发事务的回滚,常见的非RuntimeException是不会触发事务的回滚的。但是我们平时做业务处理时,需要捕获异常,所以可以手动抛出RuntimeException异常或者添加rollbackFor = Exception.class(也可以指定相应异常)

事务的隔离级别:是指若干个并发的事务之间的隔离程度

1. @Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据(会出现脏读,
 不可重复读) 基本不使用
 
2. @Transactional(isolation = Isolation.READ_COMMITTED):读取已提交数据(会出现不可重复读和幻读)
 
3. @Transactional(isolation = Isolation.REPEATABLE_READ):可重复读(会出现幻读)
 
4. @Transactional(isolation = Isolation.SERIALIZABLE):串行化

7、AOP注解

7.1 @After 在方法执行之后执行(方法上)

@After("pt()")
public void after(){
}

7.2 @Before 在方法执行之前执行(方法上)

@Before("pt()")
public void before(){
}

7.3 @Around 在方法执行之前与之后执行(方法上)

@Around("pt()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
    Object ret = pjp.proceed();
    return ret;
}

7.4 @AfterReturning当前方法作为返回后通知

@AfterReturning(value="pt()",returning = "ret")
public void afterReturning(Object ret) {
}

7.5 @AfterThrowing当前方法作为异常后通知

@AfterThrowing(value="pt()",throwing = "t")
public void afterThrowing(Throwable t){
}

@Aspect:声明一个切面

@PointCut:声明切点

@EnableAspectJAutoProxy:开启Spring对AspectJ代理的支持

8、Lombok

8.1 @Setter

注解在属性上。为属性提供 setting 方法。

8.2 @Getter

注解在属性上。为属性[欢迎转载听雨的人博客]提供 getting 方法。

8.3 @Data

注解在类上。等同于添加如下注解: @Getter/@Setter生成get,set方法 @ToString 生成toString方法 @EqualsAndHashCode 生成equals和hashcode方法 @RequiredArgsConstructor 生成一个指定名称的静态方法

public class Programmer{
    @Getter
    @Setter
    private String name;

    @Setter(AccessLevel.PROTECTED)
    private int age;

    @Getter(AccessLevel.PUBLIC)
    private String language;
}

相当于:

public class Programmer{
    private String name;
    private int age;
    private String language;

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    protected void setAge(int age){
        this.age = age;
    }

    public String getLanguage(){
        return language;
    }
}

9、MyBatis中常用注解

9.1 @Insert(sql语句):实现新增

public interface UserDAO{
  @Options(useGeneratedKeys = true,keyColumn = "uid", keyProperty = "id")
  @Insert("insert into t_user(username,password,gender,birth) values(#{username},#{password},#{gender},#{birth})")
  public void insertUser(User user);
}
  • 设置@Options属性userGeneratedKeys的值为true,并指定实例对象中主键的属性名keyProperty=“id”,以及在数据库中的字段名keyColumn=“uid”。这样在user插入数据后,userId属性会被自动赋值

9.2 @Update(sql语句):实现更新

public interface UserDAO{
  @Update("update t_user set username=#{usernmae},password=#{password}")
  public void updateUser(User user);
}

9.3 @Delete(sql语句):实现删除

public interface UserDAO{
  @Delete("delete from t_user where id = #{id}")
  public void deleteUserById(@Param("id") int id);
}

9.4 @Select(sql语句):实现查询

public interface UserDAO{
  @Select("select * from t_user where id = #{id} and username = {#username}")
  public User queryUserbyId(@Param("id") int id,@Param("username") String username);
}

其他MyBatis注解:

@Result(property="实体类属性的名称",jdbcType=数据库字段类型):实现结果集封装

@Results(column="数据库字段名",porperty="实体类属性名",jdbcType="数据库字段数据类型"):封装多个结果集(当数据库字段名与实体类对应的属性名不一致时,可以使用@Results映射来将其对应起来)

@ResultMap(@Results的id值):实现引用@Results 定义的封装

@One:实现一对一结果集封装

@Many:实现一对多结果集封装

@CacheNamespace:实现注解二级缓存的使用

10、其他

1.@Scope注解默认的singleton单例模式。

@Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域:基本作用域singleton(单例)、prototype(多例),Web 作用域(reqeust、session、globalsession),自定义作用域。

2.Enable注解说明*

@EnableAsync: 开启异步方法的支持。

@EnableScheduling: 开启计划任务的支持。

@EnableAspectAutoProxy:开启对AspectJ自动代理的支持

@EnableAsync:开启异步方法的支持

@EnableScheduling:开启计划任务的支持

@EnableWebMvc:开启web MVC的配置支持

@EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持

@EnableJpaRepositories:开启对SpringData JPA Repository的支持

@EnableTransactionManagement:开启注解式事务的支持

@EnableCaching:开启注解式的缓存支持文章来源地址https://www.toymoban.com/news/detail-790949.html

到了这里,关于Java的一些常用注解及其作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring MVC中的一些常用注解

    目录 @RequestMapping 实现路由映射 限制请求方式 @PathVariable 从url中获取变量的值 更改绑定参数的名字 @RequestParam 可以传递集合  更改绑定参数的名字 可修改是否为必传参数 @RequestBody 获取请求正文的内容  可修改是否为必传参数 @RequestPart 可以支持上传文件 更改绑定参数的名字

    2024年01月19日
    浏览(45)
  • Java中注解的作用是什么?

    注解(Annotation)是Java中一种元数据,它允许开发者在代码中添加一些附加信息,这些信息可以在编译时或运行时被处理。注解为开发人员提供了一种在源代码中包含元数据的方式,这些元数据不会影响程序的逻辑执行。Java注解的作用有以下几个方面: 提供信息给编译器:注

    2024年02月16日
    浏览(41)
  • 关于Java注解的一些理解 小结

    目录 1. 常用注解和理解 2. 自定义注解 2.1 案例背景 2.2 设计思路 3 总结 注解在我的理解下,就是代码中的特殊标记,这些标记可以在 编译、类加载、运行时 被读取,并执行相对应的处理。 可能有些抽象,简单来说注解其实在开发中是非常常见的,比如我们在使用各种框架时

    2023年04月23日
    浏览(42)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(53)
  • 关于Java中@Transient主键的作用的一些介绍

    @Transient 主下面是关于 @Transient 主键的使用方法、代码案例以及与 transient 的区别,以及一些实用场景的详细介绍。 在实体类中,通常需要将某些字段标记为主键,并将其映射到数据库中的主键字段。但是,有时候我们可能希望某个字段在实体类中作为主键使用,但不

    2024年02月10日
    浏览(44)
  • java 常用注解, 常用关键字

    用 @Controller 定义一个控制器类 @Controller 用于标记在一个类上,使用它标记的类就是一个Spring(MVC,BOOT)的 Controller类,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了 @RequestMapping 注解。 @Controller 只是定义了一个控制器类,而使用 @RequestMapping 注解的方法

    2024年02月08日
    浏览(42)
  • Java常用注解

    友情提醒: 先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。用到的资料都放在文章最末尾了(不过估计也没人看完这篇文章,太长了) ①元数据概念 :描述数据或信息资源等对象的数据,其使用目的在于:识别资源;评价资源;追踪使用

    2024年02月04日
    浏览(38)
  • java中常用注解汇总

    1 Maven依赖     2 值校验 2.1 @Null注解 被注解的元素必须为null 2.2 @NotNull注解 被注解的元素必须不为null 2.3 @NotBlank注解 验证注解的元素值不为空(不为null、去除首位空格后长度为0) ,并且类型为String。 2.4 @NotEmpty注解 验证注解的元素值不为null且不为空(字符串长度不为0、集

    2024年02月14日
    浏览(44)
  • Java jackson常用注解汇总

    提起 jackson ,在日常使用中,由于涉及到各种序列化和反序列化的处理,就不能不提 注解 ,了解注解的常用方式可以极大地方便我们处理序列化,今天分享一些在使用 jackson 中涉及到的注解。 目录 1.@JsonProperty - 字段命名 2.@JsonPropertyOrder - 字段序列化顺序 3.@JsonAlias - 字段别

    2024年02月05日
    浏览(47)
  • @Repository注解的作用和用法,以及和@Mapper的区别

    @Repository是属于Spring的注解。它用来标注访问层的类(Dao层),它表示一个仓库,主要用于封装对于数据库的访问。其实现方式与@Component注解相同,只是为了明确类的作用而设立。 即@Repository是@Component注解的一个派生品,与@Service和@Controller都可以理解为@Component注解的扩展。

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包