springBoot项目相关注解

springBoot项目相关注解

spring相关注解

  1. IoC相关注解

     @Component: 类似于, 没有实际业务含义
     @Repository: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示数据访问对象, 俗称DAO.
     @Service: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示服务对象, 俗称Service.
     @Controller: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示控制器对象, 俗称Controller.
     @Scope: 类似于中的scope属性. 取值有: singleton, prototype, request, session, global session, application.
    
  2. DI相关注解

     @AutoWired: 是spring提供的注解, 默认先按类型进行注入, 如果找到则注入, 找不到再按照名称进行注入; 如果找到多个匹配的类型, 抛出异常.
    
     @Resource: 是javax.annotation包中提供的注解, 默认先按照名称注入, 名称一致则注入, 如果没有同名的, 再按照类型注入.
     
     @Value: 用于读取properties资源文件中的数据, 并为其描述的属性赋值.
    
  3. 切面(AOP)相关注解

     @Aspect 声明一个切面
     @After 在方法执行之后执行(方法上)
     @Before 在方法执行之前执行(方法上)
     @Around 在方法执行之前与之后执行(方法上)
     @PointCut 声明切点
    
  4. @Bean注解(相当于xml配置中的标签,让spring帮我们创建对象并管理的配置)

    1. @Bean(name = "someBean",initMethod = "init",destroyMethod = "destroy")这个和标签配置方式一样,分别代表被创建,被初始化和被销毁
    2. 我们贴@Bean注解的时候一定要被扫描到,注解才能生效(一般配合@ComponentScan使用,这个注解可以指定扫描的路径,如果不指定,那么就在@ComponentScan注解所贴类的所在包及其子包进行扫描)
    3. @Bean有个scope属性,@scope要单独贴一下,它是表示该bean的作用情况Singleton(单例,一个spring容器中只有一个,也是我们默认使用的);Protetype(每次调用创建一个新bean);Request(web项目中,给每个HTTPrequest新建一个bean);Session(web项目中,给每个http session新建一个bean);GlobalSession(给每一个 global http session新建一个Bean实例)
    4. bean对象里面有其他bean对象作为属性注入时,例如在SomeBean类中有属性OtherBean
          @Configuration
          //组件扫描件标签,如果不指定basePackages,那么默认是扫描当前类所在包及其子包
          @ComponentScan()
          public class AppConfig {
      
              @Bean
              public OtherBean otherBean(){
                  return new OtherBean();
              }
      
              //方式一
              @Bean
              public SomeBean someBean(){
      
                  SomeBean someBean = new SomeBean();
                  /*注意,这里设置的otherbean一定不能自己new,否则拿到的就不是spring容器里的
                  ,而要直接调用otherBean()
                  */
                  someBean.setOtherBean(otherBean());
                  return someBean;
              }
      
              //方式二
              @Bean
              public SomeBean someBean(OtherBean otherBean){
                  //该方式是直接定义参数去接收OtherBean,spring容器会自动帮我们创建好
                  //ohernbean并传过来
                  SomeBean someBean = new SomeBean();
                  someBean.setOtherBean(otherBean);
                  return someBean;
              }
          }
      
  5. @Value注解

    1. 支持如下方式的注入:
      • 注入普通字符
      • 注入操作系统属性
      • 注入表达式结果
      • 注入其它bean属性
      • 注入文件资源
      • 注入网站资源
      • 注入配置文件
    2. @Value三种情况的用法。
      • ${}是去找外部配置的参数,将值赋过来
      • #{}是SpEL表达式,去寻找对应变量的内容
      • #{}直接写字符串就是将字符串的值注入进去

SpringMVC常用注解

  1. @EnableWebMvc在配置类中开启WebMVC的配置支持。

  2. @Controller

  3. @RequestMapping用于映射web请求,包括访问路径和参数。

  4. @ResponseBody支持将返回值放到response内,而不是一个页面,通常用户返回json数据。

  5. @RequestBody允许request的参数在request体中,而不是在直接连接的地址后面。(放在参数前)

  6. @PathVariable用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法。

  7. @RestController
    该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。

  8. @ControllerAdvice(控制器增强)

    • 全局异常处理
    • 全局数据绑定
    • 全局数据预处理

    ControllerAdvice的常用场景

  9. @ExceptionHandler(RuntimeException.class)用于全局处理控制器里的异常。这里表示的是处理runtime类型的异常

  10. @InitBinder
    用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。

  11. @ModelAttribute
    (1)@ModelAttribute注释方法
    如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法。可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如权限的验证(也可以使用Interceptor)等。

    (2)@ModelAttribute注释一个方法的参数
    当作为方法的参数使用,指示的参数应该从模型中检索。如果不存在,它应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充。(说人话就是@ModelAttribute注解的参数要被实例化,并且添加到model中,同时还可以给实例化的像取个名字)

  12. @Transactional (事务),可以这样用@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)

    • @Transactional 注解的属性信息
      • 属性名 说明
        name 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
        propagation 事务的传播行为,默认值为 REQUIRED。
        isolation 事务的隔离度,默认值采用 DEFAULT。
        timeout 事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。
        read-only 指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。
        rollback-for 用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。
        no-rollback- for 抛出 no-rollback-for 指定的异常类型,不回滚事务。

springBoot中用到的其他一些注解

  1. @configuration:贴了这个注解就表示当前类为配置类(类似于xml,可以配置各种bean等)
  2. @Import:可以用于导入其他的配置类,例如:@Import(OtherConfig.class)
  3. @ImportResource:配置文件导入注解,例如:@ImportResource("classpath:applicationContext.xml")
  4. 测试相关@RunWith(SpringRunner.class) @ContextConfiguration(classes = {AppConfig.class})这两个是配合使用的,runwith是运行器,如果里面放入JUnit4.class,就表示用JUnit4来运行ContextConfiguration可以传入配置类,或者配置文件
  5. @PropertySource:资源文件加载配置注解,用于将properties类型文件加载到spring容器中,贴在类上(@PropertySource("classpath:db.properties"))就类似于如下效果
    
  1. @SpringBootApplication启动类注解,贴了这个注解的类就成为了启动类,一般springBoot项目就只有一个启动类,启动类都是配置类
  2. @Slf4j这是lombok提供的日志注解,等价于private static final Logger log = LoggerFactory.getLogger(当前类.class);
  3. @MapperScan:mapper扫描注解,用来帮忙创建mapper接口的动态代理实现类,因为其是作用于接口的,所以配置的时候一定要配到mapper包(@MapperScan("cn.sushen.crm.mapper")),否则可能把其他的接口也创建了代理实现类
  4. @RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
        @RequestMapping("show16")
        public ModelAndView test16(@RequestParam("name")String name)
        {
            //@RequestParam("name")里面的参数name必须和请求传过来的参数一致,即
            //传过来的也要为name,但是后面接收的String name可以不必为name,因为是
            //将@RequestParam取到的值,赋值给后面的形参
            ModelAndView mv = new ModelAndView();
            mv.setViewName("hello2");
            mv.addObject("msg", "接收普通的请求参数:" + name);
            return mv;
        }
    
    
  5. @ConfigurationProperties:批量绑定属性,从application.properties里面批量取出属性,进行绑定,绑定到的自定义的类定义的属性必须和application.properties里面的名称一致(便可实现自动绑定)
         @Component @ToString @Setter @Getter
         @ConfigurationProperties("jdbc")  
       //相当于 @ConfigurationProperties(prefix="jdbc")
        public class MyData { 
             private String username; 
             private String password; 
        }
        //或者在配置类中自动绑定
        @Bean @ConfigurationProperties("jdbc") 
        public MyData myData() { 
            return new MyData(); 
        }
    
  6. @PathVariable("xxx"):通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“),例如:
        @RequestMapping("show/{id}/{name}")
        //@RequestMapping和@PathVariable里面的占位符名称必须一样(这里对应的
        //是id和name),这样访问localhost/show/112/java路径,那么在test5方法中就
        //能拿到对应的id=112,name=java
        public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){
            ModelAndView mv = new ModelAndView();
            mv.addObject("msg","占位符映射:id:"+ids+";name:"+names);
            mv.setViewName("hello2");
            return mv;
        }
    
    
  7. 【Java用法】Java程序中@Valid注解是什么以及@Valid注解的用法_No8g攻城狮的博客-CSDN博客

你可能感兴趣的:(springBoot项目相关注解)