Springboot中注解使用

2022-06-15 12:09:27

1.@Component元注解

可以用来标注其他注解,被他标注的注解,会起到与它相同或者类似的作用,例如@Controller @Service @Repository

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
	String value() default "";
}
   @Component 也可用来对那些比较中立的类进行注释(说不好是服务层还是控制层或是数据访问层)

2.@responseBody

   @responseBody注解可以将Controller的方法返回的对象通过适当的转换器转换为指定的格式,一般用来返回JSON数据或者是XML

3.@ControllerAdvice + @ExceptionHandler

进行 Controller 层异常处理,不用在 Controller 层进行 try-catch处理异常

@ResponseBody
@ControllerAdvice
public class ExceptionHandle {

    @ExceptionHandler(value = Exception.class)
    public ResultMap hadndle(Exception e){
        e.printStackTrace();
        return Result.error(e.getMessage());
    }
}

4.@Autowired + (@Qualifier)

   自动装配,作用是为了省略Java代码里面的getter/setter与bean属性中的property。并且getter也可以看需求,如果私有属性    需要对外提供的话,应当予以保留。
   当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的      地方去。

   但是bean里面如果有property属性配置项,java代码里面又去掉了属性的getter/setter并使用@Autowired注解标注,Spring会    按照xml优先的原则去java代码中寻找属性的getter/setter,则会导致初始化bean报错。

   如果我们删除了xml文件中的Bean定义,Spring容器便找不到这个了。如果属性找不到又不想让Spring容器抛异常,而只是显    示null,我们可以将@Autowired注解的required属性设置为false

public class People
{
    @Autowired(required = false)
    private Name name
    
    @Autowired(required = false)
    private Sex sex
    
    public String toString()
    {
        return name+ "," + sex
    }
}

  如果是一个借口,有多种实现类,Bean里引用的是接口名,Spring便不知道该引用哪个实现类了,这时我们可以用@Qualifier进行     指定我们要引用的是哪个实现类

@Service
public class People
{
    @Autowired
    @Qualifier("Chinese")
    private Person person;
    
    public String toString()
    {
        return person.personName();
    }
}

5.@Resource

 @Resource的装配顺序:
   1、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
   2、指定了name或者type则根据指定的类型去匹配bean
   3、name和type全都制定了,则根据指定的name和type去匹配bean,任何一个不匹配都将报错

@Service
public class People
{
    @Resource(name = "chinese")
    private Chinese chinese;
    
    @Resource(type = Japanese.class)
    private Japanese japanese;
    
    public String toString()
    {
        return chinese + "," + japanese;
    }
}

 @Autowired和@Resource注解的区别:
   1、@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
   2、@Autowired是Spring的注解,@Resource是J2EE的注解,Spring属于第三方的,J2EE是Java自己的,因此建议使用@Resource注解来减少代码和Spring之间的耦合

6.@Service

 把xml文件中配置的bean也省略了,更加方便

      1.放在类前,直接声明该类是一个bean,其他的类才可以使用@Autowired将该类作为一个成员变量自动注入

      2.bean的id与类名相同,但首字母小写

7.@Configuration

   用于定义配置类,可替换xml配置文件,被注解的类内部包含一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,用于构建bean定义,初始化Spring容器。

8.@Bean

@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。所添加的bean的id名是方法名

也可以给bean赋予别名

   @Bean(name = "haha")
   @Bean(name = { "hehe", "lala", "heihei" })

9.@Scheduled

  定时执行任务:

     1、注解@Scheduled,要写在该实现方法上
     2、定时器的任务方法不能有返回值,如果有返回值,需要设定一个proxytargetclass的某个值为true
     3、实现类上要有组件的注解@Component。

   9.1 每60秒执行一次,每次执行周期以上次开始时间为基准

@Scheduled(fixedRate = 1000 * 60,initialDelay = 2000)

   9.2  initialDelay = 2000 表示第一次执行开始时间延迟2秒

@Scheduled(fixedDelay=2000)

   9.3 表示只在工作日执行

@Scheduled(cron="*/5 * * * * MON-FRI")

10.@Value

10.1 通过@value方式来获取配置文件的内容

表示取出配置中的user.from的值:

@Value("${user.from}")

     10.2 取出一个bean方法

,取出User.class类中的name方法:

@Value("#{user.name()}")
@Service("user") 
public class User{  
 public String name() { 
  return "大雄"; 
 } 
}

 11 Aop面向切面编程常用注解

      @Aspect

      @Component

      @PointCut

 @Before

      @After

      @AfterReturning

      @Around

      @AfterThrowing

     11.1 @Aspect

       面向切面编程注解,常用于同一日志管理

     11.2 @Pointcut("execution(public * com.myProject.controller..*.*(..))")

        Pointcut指定哪些方法需要被执行"AOP"面向切面编程

       @PointCut 注解的方法不会被执行,只起到了一个把切面表达式抽象出来的作用。


     11.3 @AfterReturning(returning = "object", pointcut = "myPointcut()")

       pointcut/value:这两个属性的作用相同,都是指定切入点对应的切入表达式。当指定了pointcut属性值后,value属性值将        会被覆盖。

       returning = "object"应该和形参的object名字一致 ,用来接收目标方法的返回值。

11.4 @AfterThrowing


        用于处理程序中未处理的异常

       pointcut / value : 这两个属性的作用相同,都是指定切入点对应的切入表达式。当指定了pointcut属性值后,value属性值        将会被覆盖。

       throwing : 返回值形参名,增强处理定义的方法可通过该形参名来访问目标方法中所抛出的异常对象。

12.@Controller

     控制层注解

13@CrossOrigin

    用来处理跨域请求的注解

  • 作者:纯洁的小魔鬼
  • 原文链接:https://blog.csdn.net/xyy1028/article/details/79184575
    更新时间:2022-06-15 12:09:27