首页 > 编程语言 > 详细

java练习生 - 常用注解

时间:2020-12-29 23:00:39      阅读:39      评论:0      收藏:0      [点我收藏+]

 功能:依赖注入

https://blog.csdn.net/isea533/article/details/78072133

https://blog.csdn.net/cw_szdx/article/details/106868298

@Bean手动创建一个实例,并保留在IOC中。

虽然麻烦一点,但自定义性更强。当我们引用第三方库中的类需要装配到Spring容器时,则只能通过@Bean来实现(因为你并不能改他的源代码在他类上加个@Component )。

@Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为多例。

 

@Component, @Service, @Controller, @Repository@Configuration:自动创建一个实例并装配到Spring容器中(放到IOC中)。

@Component 是通用注解,其他三个注解是这个注解的拓展,并且赋予了特定的功能

@Repository 注解在持久层中,具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能。

@Controller spring-mvc的注解,具有将请求进行转发,重定向的功能。

@Service 是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。

@Configuration 是配置类注解,并且该注解定义的 bean 方法中可以直接调用方法来获取ICO中的实例,不需要 @Autowired 注入后使用。

用这些注解对应用进行分层之后,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。

 

@Autowired@Resource:ICO中取出对应的实例,注入声明的参数

@Autowired@Resource 一般用在变量上,spring容器会自动注入值。

@Autowired@Resource 也可以用在方法上,spring容器会在类加载后自动注入这个方法的参数,并执行一遍方法

@Autowired 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired() 
@Qualifier("baseDao")
private BaseDao baseDao;

@Resource 默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名查找实例,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配,如下:

@Resource(name="baseDao")
private BaseDao baseDao;

@Autowired是基于类型匹配的,所以如果一个bean是collection或者map则不能用@Autowired而需要使用@Resource。

推荐使用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。

 

功能:强化实体类

@Getter,@Setter该注解用在类或属性上,可以为相应的属性自动生成Setter/Getter方法。

用法:

 

import lombok.Getter;
import lombok.Setter;
@Setter @Getter
public class User { private Integer id; private String name; private Integer age; private String sex; }


@ToString该注解用在类上,可以生成toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。如:【User(id=1, name=拉拉, age=20)】

用法:

 

import lombok.ToString;
@ToString
public class User { private Integer id; private String name; private Integer age; }

 

@EqualsAndHashCode该注解用在类上,默认情况下,会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成equals和hasCode,也能通过exclude注解来排除一些属性。

@EqualsAndHashCode(exclude={"id", "shape"}) :通过exclude参数来排除一些属性

@EqualsAndHashCode(of={"id", "shape"}):通过of参数来指定只使用一些属性

@EqualsAndHashCode(callSuper=true):默认仅使用该类中定义的属性且不使用父类的属性,可通过callSuper=true让其生成的方法中包含父类的属性。

 

@NoArgsConstructor会生成一个无参数的构造方法。

 

@AllArgsContructor会生成一个包含所有变量的构造方法。

 

@RequiredArgsConstructor会生成一个包含常量标识了NotNull的变量的构造方法。生成的构造方法是私有的private。

 

@Data该注解用在类上,相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。该注解包含的@EqualsAndHashCode默认不包括父类的属性。如有必要,需同时加上@EqualsAndHashCode(callSuper=true)注解。

 

@Accessors(fluent = true) fluent设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。

用法:

 

@Data
@Accessors(fluent = true)
public class User {
    private int id;
    private String name;
}

 

@Accessors(prefix = {"tb","tbn"}) prefix设置为true,则用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。

用法:

 

@Data
@Accessors(prefix = {"tb","tbn"})
public class User {
    private int tb_id;
    private String tbn_name;
}

 

 

@Accessors(chain = true) chain设置为true,则setter方法返回当前对象。

用法:

 

@Data
@Accessors(chain = true)
public class User {
    private int id;
    private String name;
}

 

 

功能:参数检查

@Valid 该注解用在属性或方法入参上,表示当前的实体类接收的参数需要根据配置的校验注解进行判断

技术分享图片 

如果校验不通过,在全局异常中通过捕捉BindException来处理。

 

功能:协助业务

@Cleanup该注解能帮助我们自动调用close()方法,很大的简化了代码。

用法:

 

import lombok.Cleanup;
public class CleanupExample {
  public static void main(String[] args) throws IOException {
    @Cleanup InputStream in = new FileInputStream(args[0]);
    @Cleanup OutputStream out = new FileOutputStream(args[1]);
    byte[] b = new byte[10000];
    while (true) {
      int r = in.read(b);
      if (r == -1) break;
      out.write(b, 0, r);
    }
  }
}

 

 

功能:数据操作

https://blog.csdn.net/jiangyu1013/article/details/84397366

@Transactional事务支持

1)接口实现类或接口实现方法上,而不是接口类中。
2)访问权限:public 的方法才起作用。@Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。
系统设计:将标签放置在需要进行事务管理的方法上,而不是放在所有接口实现类上:只读的接口就不需要事务管理,由于配置了@Transactional就需要AOP拦截及事务的处理,可能影响系统性能。

 

java练习生 - 常用注解

原文:https://www.cnblogs.com/ariter/p/14208438.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!