• java练习生


     一、功能:依赖注入

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

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

    1.1 创建实例并装配到Spring容器(IOC)中

    @Bean 一般加在方法上,手动创建一个实例,并保留在IOC中。默认情况下bean的名称和方法名称相同,你也可以使用name属性来指定。当我们引用第三方库中的类需要装配到Spring容器时,则只能通过@Bean来实现,因为你并不能改他的源代码在他类上加个@Component )。

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

    @Component 自动创建一个实例,并保留在IOC中。是通用注解,其他三个注解是这个注解的拓展,并且赋予了特定的功能

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

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

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

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

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

    1.2 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的耦合。

    1.3 按条件创建实例

    @ConditionalOnExpression 根据是否满足某个条件来决定是否创建该类的实例到IOC。

    支持语法如下:

    @ConditionalOnExpression("${mq.server.enabled}==1&&${rabbitmq.server.enabled:true}")

    @ConditionalOnExpression("'${mq.server}'.equals('test')")

    二、功能:强化实体类

    @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来处理。

     

    四、功能:协助业务

    https://www.cnblogs.com/xiaomaomao/p/13934688.html

    @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);
        }
      }
    }

    @ConfigurationProperties 让使用该标注类的属性绑定程序配置文件。

    @EnableConfigurationProperties 让使用 @ConfigurationProperties 注解的类生效,并且将该类注入到Spring容器中,交由Spring容器进行管理。

     

    @Slf4j 自动创建日志操作类的实例,相当于执行【private final Logger log = LoggerFactory.getLogger(当前类名.class);】语句,在标注的类中可以直接使用log.info(...)等打印日志。

    @Value 自动获取程序配置并赋值,并可以通过冒号添加默认值,这样当配置不存在时会直接使用默认值,而避免抛异常。 

    使用:

    @Value("${server.port:8888}")
    public String curAppPort;

    五、功能:数据操作

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

    @Transactional事务支持。

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

  • 相关阅读:
    CDS视图篇 1
    SAP S/4 HANA与SAP Business Suite/R3(ECC)的区别
    SAP R3和SAP Business One的区别
    REUSE_ALV_POPUP_TO_SELECT使用技巧
    ALV显示金额字段值扩大100倍
    取汇率
    货币转换函数:CURRENCY_CONVERTING_FACTOR
    SUBMIT标准程序取ALV数据
    未清SO关闭处理
    [转载]树、森林和二叉树的转换
  • 原文地址:https://www.cnblogs.com/ariter/p/14208438.html
Copyright © 2020-2023  润新知