SpringBoot 个人笔记-常用注解

具有的特性:派生性、层次性、遗传性

1、模式注解(范式注解)装配:声明在引用中所扮演的角色

  • @Component 基础注解(生成bean),下面几个注解内部都有这个注解(“继承这个注解”)
  • @Configuration 标记在配置类上面,表明这是一个配置类
  • @Controller 控制器模式注解,标记在web模块进入,逻辑控制器
  • @Repository 数据存储标,记在访问数据库的地方
  • @Service 服务模式注解,业务逻辑上
    @Bean
    public UserDao userDao(){
       return new UserDao();    
    

@ComponentScan 指定范围注解

@ResponseBody(返回信息自动json化)

@RestController  (ResponseBody + Controller)

@RestController//代替@ResponseBody的作用给每一个反方的返回值
public class Index {

    @RequestMapping("/hello")
    public Map<String,Object> index(){
        Map<String,Object> map = new HashMap<>();
        map.put("String",55);
        map.put("double","白开水");
        return map;
    }

    @RequestMapping("/hello02")
    public String index02(){
        return "这就是一行字符串!!02hello";
    }

    @RequestMapping("/hello03")
    public String index03(){
        return "这就是一行字符串!!03hello";
    }
}

@EnableAutoConfiguration的作用就是开启自动装配,加载pom里的内容(不会扫描其他的包)

@ComponentScan("com.stude.spring_boot_stude.base")
@EnableAutoConfiguration
public class HelloWorld {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorld.class,args);
    }
}

@SpringBootApplication (= EnableAutoConfiguration + ComponentScan)不设置扫描路径,默认是当前包及其子包

@SpringBootApplication("com.stude.spring_boot_stude.base")
public class AutoConfiguration {

    public static void main(String[] args) {
        SpringApplication.run(AutoConfiguration.class,args);
    }
}

全局异常捕获

       //简短描述 错误类型
        logger.error(runtimeException.toString());
        //调用此方法会把完整的异常信息打印到控制台
        void printStackTrace()

@ControllerAdvice指定需要捕获的类,切面编程@ExceptionHandler(RuntimeException.class)指定捕获异常类型

@ControllerAdvice(basePackages = "com.stude.spring_boot_stude.exception")
public class GlobalExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    //这里可以使用ResponseBody返回json或者使用modeAndView返回页面
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Map<String,Object> errorResult(RuntimeException runtimeException){
        logger.error(runtimeException.toString());
        runtimeException.printStackTrace();
        Map<String,Object> errorResultMap = new HashMap<>();
        errorResultMap.put("errorCode","500");
        errorResultMap.put("errorMsg","运行时异常");
        return errorResultMap;
    }
}
    //返回错误页面
    @ExceptionHandler(RuntimeException.class)
    public String runtimeExceptionHandler(RuntimeException runtimeException, ModelMap modelMap) {
        logger.error(runtimeException.getLocalizedMessage());
        modelMap.put("status", IntegralConstant.FAIL_STATUS);
        return "exception";
    }

@RestControllerAdvice 类似于 @RestController 与 @Controller的区别

ResponseBodyAdvice 用于实现传入参数格式转换(用我们统一的自定义类传递消息)

@RestControllerAdvice
public class CommonResponseDataAdvice implements ResponseBodyAdvice<Object> {

    /**
     * 判断消息,是否需要转化固定格式
     * 类或者方法标记了IgnoreResponseAdvice 注解,就不转换
     * @param methodParameter
     * @param aClass
     * @return
     */
    @Override
    public boolean supports(MethodParameter methodParameter,
                            Class<? extends HttpMessageConverter<?>> aClass) {

        if (methodParameter.getDeclaringClass().isAnnotationPresent(
                IgnoreResponseAdvice.class
        )) {
            return false;
        }

        if (methodParameter.getMethod().isAnnotationPresent(
                IgnoreResponseAdvice.class
        )) {
            return false;
        }

        return true;
    }

    /**
     * 消息转化固定格式
     * @param o
     * @param methodParameter
     * @param mediaType
     * @param aClass
     * @param serverHttpRequest
     * @param serverHttpResponse
     * @return
     */
    @Nullable  //代表参数可以是空值 @NonNull 代表不能是空值
    @Override
    public Object beforeBodyWrite(@Nullable Object o,
                                  MethodParameter methodParameter,
                                  MediaType mediaType,
                                  Class<? extends HttpMessageConverter<?>> aClass,
                                  ServerHttpRequest serverHttpRequest,
                                  ServerHttpResponse serverHttpResponse) {

        CommonResponse<Object> response = new CommonResponse<>(0, "");
        if (null == o) {
            return response;
        } else if (o instanceof CommonResponse) {
            response = (CommonResponse<Object>) o;
        } else {
            response.setData(o);
        }

        return response;
    }
}

@Autowired  注入bean  (@Autowired(required=false) 代表即使没有bean也不会报错

@Autowired(required=false)
    private LogDao logDao;

@Qualifier("userDao")  设置注入bean的名称  (一般这两个注解一起使用)

    @Autowired
    @Qualifier("userDao")
    private UserDao userDao;
    @Autowired
    @Qualifier("userDao")
    public void setUserDao(UserDao userDao) {
        System.out.println("auto inject");
        this.userDao = userDao;
    }
    @Autowired
    public void init(@Qualifier("userDao")UserDao userDao,LogDao logDao){
        System.out.println("multi param inject");
        this.userDao = userDao;
        this.logDao =logDao;
    }

    @Resource("car")  (功能类似Autowired   +  Qualifier

    @Resource("car")
    private void setCar(Car car){
        System.out.println("execute in setCar");
        this.car = car;
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值