springBoot项目相关注解

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博客
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容