Springboot中常用注解的使用语境及方法

Springboot中常用注解的使用语境及方法,第1张

一、注解 1. 关于 @Slf4j 注解的使用说明

         作用:帮我们创建一个Logger对象,如下图代码所示

  private static  final Logger log= LoggerFactory.getLogger(BooksController.class); 

      此注解使用在类名之上,如下图代码所示

@Slf4j  
@RestController  
@RequestMapping("/books")  
public class BooksController {  
//    创建记录日志的对象  
//    private static  final Logger log= LoggerFactory.getLogger(BooksController.class);  
  
    @GetMapping  
    public String getById(){  
        System.out.println("springboot is running");  
  
        log.trace("trace..."); //这个级别太低,基本上没人用  
        log.debug("debug...");  
        log.info("info...");  
        log.warn("warn....");  
        log.error("error....");  
//        其实后面还有一个fatal 但是在idea中将fatal和error合二为一了  
  
  
        return "springboot is running";  
    }  
}

使用前提,导入Maven坐标:

  
    org.projectlombok  
    lombok  

2. @Configuration 注解        作用:用于定义配置类,可替换xml配置文件,被注解的类内部包含一个或多个被@Bean注解的方法,这些方法将会被`AnnotationConfigApplicationContext`或`AnnotationConfigWebApplicationContext`类(启动类)进行扫描,并用于构建bean(创建bean对象),初始化Spring容器。       例子:
   //拦截器  
@Configuration  //第一步:配置类  交给Spring管理  确保在启动类的包或子包下,才能被扫描到  
public class NPCConfig {  
// 第二步:做对应Bean  
    @Bean  
    public MybatisPlusInterceptor mybatisPlusInterceptor(){  
//        第三步:创建拦截器(这只是一个壳子)  
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();  
//        第四步:添加内部拦截器  (分页的)  
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());  
//        可以添加多个内部拦截器  
        return interceptor;  
    }  
}
    注意 : 

               @Configuration配置spring并启动spring容器


                 @Configuration启动容器+@Bean注册Bean


                 @Configuration启动容器+@Component注册Bean


                 @Configuration不可以是final类型;


                 @Configuration不可以是匿名类;


                嵌套的configuration必须是静态类。

   @Configuation总结:
                 @Configuation等价于
                 @Bean等价于
                 @ComponentScan等价于

    补充:

作用:在spring配置文件pom.xml中,所有的代码都是在此标签之中开始书写的


作用:这个是在spring中的Bean管理 *** 作,使用此标签进行创建对象和注入属性

   
   
   
     

:Bean管理的一种方式,基于注解方式实现对 对象的创建。当我们使用这种方式的时候,开启组件扫描就需要这段代码。“base-package”属性值可以一个或者多个包,多个包的话可以使用逗号隔开。  

具体的注解解释可以参考下面链接中的文章:
http://t.csdn.cn/dhgoW

3.灌入REST风格有关的注解      理解:

        使用REST风格对资源进行访问称为RESTFUL

        http://localhost/books      查询全部用户信息  Get 查询  


        http://localhost/books/id   查询指定用户信息  Get 查询  


        http://localhost/books      添加某个用户信息  Post (新增、保存)

 
        http://localhost/books      修改用户用户信息  Put (修改、更新)  


        http://localhost/books/id   删除某个用户信息  Delete

    例子:
/*@Controller  
@ResponseBody 可以把每个方法提上面的 @ResponseBody注解,提取到这里 //@RequestBody请求体参数  都是传JSON数据过来*/  
@RestController//@Controller + @ResponseBody = RestController  
@RequestMapping(value="/users")  //通过观察,我们下面的@RequestMapping注解中有共同的"/users"部分,所以我们把他提取出来  
public class UserController {  
    @RequestMapping //这个注解可以代替下面这一句代码  
//    @RequestMapping(value="/users",method = RequestMethod.POST)//method = RequestMethod.POST 限定提交方式,在这里采用POST方式发送提交  
//    @ResponseBody  
    public String save(){  
        System.out.println("user save....");//在控制台中显示  
        return  "{module:user save}"; //这个内容会在页面显示 http://localhost:8080/users  
    }  
  
    @DeleteMapping("{id}")//这个注解可以代替下面这一句代码  
//    @RequestMapping(value="/users/{id}",method = RequestMethod.DELETE)  
//    @ResponseBody  
    public String delete(@PathVariable Integer id){ //@PathVariable 路径变量参数 这个地方的id要和路径中的id 名字要一致,变量名同  
        System.out.println("user delete:"+id);    
return "{module:user delete}";  
    }  
  
    @RequestMapping  
//    @RequestMapping(value="/users",method = RequestMethod.PUT)  
//    @ResponseBody  
     public String update (@PathVariable User user){  
        System.out.println(user);  
        return "user update";  
    }  
  
    @GetMapping("{id}")  
//    @RequestMapping(value="/users/{id}",method = RequestMethod.GET)  
//    @ResponseBody  
    public  String getById(@PathVariable Integer id){  //@PathVariable 这个注解表示形参注解,绑定路径参数与处理器方法形参减的关系;如果不写这个的话,获取不到网页传来的数据
        System.out.println(id);  
        return "user update";  
    }  
}

前提:
      
            org.springframework.boot
            spring-boot-starter-web
        

4.@RestControllerAdvice注解     理解:

      @RestControllerAdvice是一个组合注解,由@ControllerAdvice+@ResponseBody组成,而    @ControllerAdvice继承了@Component,因此@RestControllerAdvice本质上是个Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法。

   特点:

     ①通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置。


     ②注解了@RestControllerAdvice的类的方法可以使用@ExceptionHandler、@InitBinder、                  @ModelAttribute注解到方法上。


    ③@RestControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上。


    ④@ExceptionHandler:用于指定异常处理方法。当与@RestControllerAdvice配合使用时,用于全局处理控制器里的异常。


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


    ⑥@ModelAttribute:本来作用是绑定键值对到Model中,当与@ControllerAdvice配合使用时,可以让全局的@RequestMapping都能获得在此处设置的键值对

    例子:
//作为springMVC的异常处理器  
//数据层业务层的异常最终会抛的表现层  
//@ControllerAdvice  
@RestControllerAdvice   //里面还有一个bean  
public class ProjectExceptionAdvice {  
  
//    这个方法拦截所有的异常信息  
    @ExceptionHandler // 这个注解可以加参数:具体拦截什么异常 @ExceptionHandler(value = NullPointerException.class)     public R doException(Exception e){  
//  记录日志,通知运维,通知开发  
        e.printStackTrace();  //出异常信息  
        return new R(false,"服务器故障,请稍后再试");  
     }  
}

原文链接:https://blog.csdn.net/user2025/article/details/105458842

5.@Data注解     作用:   

    此时表示R类实现了get+set+toString+hashcode+equals方法
    注意!!!!!并没有实现构造方法

 @Data
  public class R{}

   @Getter在本类中创造所有的get方法  


   @Setterr在本类中创造所有的set方法  


   @NoArgsrConstructorr在本类中创造 无参构造方法

 
   @AllArgsConstructorr在本类中创造全部的构造方法

使用前提:

      

        
            org.projectlombok
            lombok
        
5.@Mapper注解      例子:
@Mapper //通过这个实现数据库的 *** 作  里面有数据库中各种各样的 *** 作  
public interface BookDao  extends BaseMapper {//指定泛型才能知道 *** 作谁  
  
}
     

         可以实现数据库的基本 *** 作,比如增删改查 *** 作

    前提:

     

        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        
   例子:    
@SpringBootTest
class StudentScoreApplicationTests {

    @Autowired
    private StudentDao studentDao;

    @Test
    void testGetById(){
        studentDao.selectById(202001);
    }


    @Test
    void contextLoads() {
    }

}

6.@TableName、 @TableId、 @TableField注解     
@Data  //get+set+toString+hashcode+equals  但是没有构造方法  
@TableName(value = "t_book")  
public class Book {  
    //    这里的属性名 要和数据库表中的属性名一致,要不然最终的查询结果是null  
//    将数据库中的结果对此变量名进行注入  
    @TableId(value="id",type = IdType.AUTO)  //代表自增算法  
    @TableField(value = "id")  
    private int id;  
  
    @TableField(value = "bookName")  
    private String bookName;  
  
    @TableField(value = "statue")  
    private String statue;  
  
    @TableField(value="type")  
    private  String type;  
  
}
   使用前提:
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        

7.有关@Component、@Service、@Controller、@Repository注解      作用:

      上面这四个注解功能都是一个样的,都是用来创建bean实例的,也可以混合使用,但是为了方便编程,我们一般把不同的注解放到不同的层中

      @Component注解:

              把普通pojo实例化到spring容器中,相当于配置文件中的   ``

       @Service服务注解:

             注入dao(dao通俗来讲就是将数据库 *** 作都封装起来),用于标注服务层,主要用来进行业务的逻辑处理


       @Controller控制器注解:

              注入服务,用于标注控制层,相当于struts中的action层

       @Repository注解:

             用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件

原文连接:http://t.csdn.cn/5BmKs

8.有关@Autowired、@Qualifier、@Resource、@Value注解      @Autowired注解:

           作用:根据属性类型进行自动装配,以后就不用在配置文件中bean实例创建对象了

@Autowired  
private BookDao bookDao; //添加根据类型注入属性的注解,定义一个BookDao类型的注解,不再需要我们添加set方法,在这个里面已经给我们封装好了

     @Qualifier注解:

             作用:根据属性名称进行注入

           如下面例子所示,UserDao类型的属性根据名称”UserDaoImpl1“进行对应,然后进行更加准确的注入。

    @Service
    public class UserService{
         @Autowired
         @Qualifier (value="userDaoImpl1")
         private UserDao userDao;
    }
    @Repository (value="userDaoImpl1")
    public class UserDaoImpl implements UserDao{
       @Override
       public void add(){
        System.out.println("dao add...");
       }
    }


    为什么会有这种方法? 因为当UserDao有多个实现类的时候,我们仅仅使用一个@Autowired注解无法准确的判断我们到底要注入哪个实现类,故有了此种方式来进行实现。

     @Resource注解

              作用:可以根据类型注入,也可以根据名称注入(本身不是spring里面的,而是java扩展包里面的)

    @Service   //此时是根据类型注入
    public class UserService{
     @Resource
     private UserDao userDao
    
    }
    @Service   //此时是根据名称注入
    public class UserService{
     @Resource (name="userDaoImpl1")
     private UserDao userDao
    
    }
  @Value注解:

        作用:注入普通类型属性

@Service
public class UserService{
   @Value(value="abc")
   private String name;  //此时name就是abc

}

二、常用maven坐标

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/801347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存