美文网首页
springBoot项目相关注解

springBoot项目相关注解

作者: 幻如常 | 来源:发表于2021-03-29 21:56 被阅读0次

    springBoot项目相关注解

    spring相关注解

    1. IoC相关注解

       @Component: 类似于<bean>, 没有实际业务含义
       @Repository: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示数据访问对象, 俗称DAO.
       @Service: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示服务对象, 俗称Service.
       @Controller: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示控制器对象, 俗称Controller.
       @Scope: 类似于<bean>中的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配置中的<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">标签,让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"))就类似于如下效果
        <context:property-placeholder location="classpath:db.perperties"/>
    
    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项目相关注解

          本文链接:https://www.haomeiwen.com/subject/drsihltx.html