SpringBoot 注解运用大全

@SpringBootApplication

@SpringBootApplication申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置

@SpringBootApplication
public class App {}

@Configuration

相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件

@Configuration
public class AppConfig {}

@EnableAutoConfiguration

自动装配,把扫描的到组件都注入到容器中

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

@Bean

用@Bean标注方法等价于XML中配置的bean

@Bean
public Person person(){
   return new Person();
}

@ComponentScan

表示将该类自动发现扫描组件。如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件。

// 基本
@ComponentScan(value="priv.linyu.helloworld")

// 排除规则
@ComponentScan(value="priv.linyu.helloworld",excludefilters= {
		@filter(type=filtertype.annotation,classes= {controller.class,....})
})

// 包含规则
@ComponentScan(value="priv.linyu.spring",includefilters= {
		@filter(type=filtertype.annotation,classes= {controller.class})
},usedefaultfilters=false)

@Scope

@Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域:基本作用域singleton(单例)、prototype(多例),Web 作用域(reqeust、session、globalsession)

  • singleton 单例模式:全局有且仅有一个实例
  • prototype 原型模式:每次获取Bean的时候会有一个新的实例
  • request:request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
  • session:session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
  • globalsession:global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义
@Scope(value="singleton")
public class AppConfig {}

@Lazy

延迟加载

@Lazy
public class AppConfig {}

@Conditional

按照一定的条件进行判断,满足条件给容器中注册

@Conditional({HelloCondition.class})
public Person person(){
   return new Person();
}

@Import

快速给容器导入组件

@Import(HelloComponent.class)
public class AppConfig {}

@ImportResource

导入相关xml配置文件

@ImportResource(locations = { "classpath:applicationContext.xml" })
public class AppConfig {}

@Value

注入 application.properties 配置的属性的值

@Value("person.name")
private String name;

@PropertySource

加载指定的属性文件(*.properties)到 Spring,可以配合@Value和@ConfigurationProperties 使用

@PropertySource(value= {"classpath:person.properties"})
public class AppConfig {}

@Autowired

属于spring规范自动导入依赖的bean。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上required=false:是否是必须,能找到对应的组件就装配,找不到就拉倒

@Autowired
private SysUserDao sysUserDao;

@MapperScan

把扫描到的类路径注入到容器中去

@MapperScan(basePackages = "priv.linyu.helloworld.core.dao")
public class App {}

@Resource

跟 @Autowired 运用一样,但它是Java规范,不是Spring规范。按byName方式进行查找,如果没有找到符合的bean,则回退为一个原始类型进行查找,如果找到就注入

@Resource
private SysUserDao sysUserDao;

@Qualifier

spring规范,当有多个同一类型的Bean时,可以用@Qualifier("name")来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入

@Qualifier("sysUserDao")
private SysUserDao sysUserDao;

@Injec

等价于默认的@Autowired,只是没有required属性

@Injec
private SysUserDao sysUserDao;

@Profile

环境配置,其中value:开发环境(dev)、生产环境(prod)、测试环境(test),可根据日常开发需要来进行指定

@Profile("dev")
public class AppConfig {}

@Component

把组件加入到容器中

@Component
public class WebLogAspect {}

@Repository

把持久层接口注入到容器中

@Repository
public interface UserMapper {}

@Service

把业务层接口注入到容器中

@Service
public class UserServiceImpl implements UserService{}

@Controller

把视图控制层接口注入到容器中

@Controller
public class UserController {}

@RestController

等同于 @Controller 和 @ResponseBody

@RestController
public class UserController {}

@RequestMapping

请求映射

@RequestMapping(value = "/forbidden.html")
public String errorPage403(){
   return "/error/forbidden";
}

@ResponseBody

表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@esponsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用

@RequestMapping(method = {RequestMethod.POST},value = "/addUser")
@ResponseBody
public ResponseData<Void> addUser(...) {}

@RequestParam

将请求参数绑定到你控制器的方法参数上

@RequestMapping(method = {RequestMethod.GET},value = "/getUserInfo")
@ResponseBody
public ResponseData<SysUser> getUserInfo(@RequestParam("nickname")String nickname) {}

@PathVariable

将URL中占位符参数{xxx}绑定到处理器类的方法形参中

@RequestMapping(method = {RequestMethod.GET},value = "/getUserInfo/{id}")
@ResponseBody
public ResponseData<SysUser> getUserInfo(@PathVariable("id")long id) {}

@RestControllerAdvice

全局的异常处理器,等同于 @RestControllerAdvice 和 @ResponseBody

@RestControllerAdvice(basePackages = "priv.linyu.helloworld")
public class GlobalExceptionHandler {}

@ExceptionHandler

异常处理器

@RestControllerAdvice(basePackages = "priv.linyu.helloworld")
public class GlobalExceptionHandler {

    /**
     *
     * @author q-linyu
     * @description 处理Shiro权限不足异常
     * @date 2020/2/29 8:57
     * @Param [e]
     * @return priv.linyu.boot.common.utils.ResponseData<java.lang.String>
     **/
    @ExceptionHandler(value = AuthorizationException.class)
    public ResponseData<String> defaultAuthorizationException(AuthorizationException e){
        System.out.println(e.getMessage());
        return new ResponseData<>(HttpStatusEnum.NOT_ACCESS);
    }

自定义注解

/*
    elementtype.type:说明该注解只能被声明在一个类前。
    elementtype.field:说明该注解只能被声明在一个类的字段前。
    elementtype.method:说明该注解只能被声明在一个类的方法前。
    elementtype.parameter:说明该注解只能被声明在一个方法参数前。
    elementtype.constructor:说明该注解只能声明在一个类的构造方法前。
    elementtype.local_variable:说明该注解只能声明在一个局部变量前。
    elementtype.annotation_type:说明该注解只能声明在一个注解类型前。
    elementtype.package:说明该注解只能声明在一个包名前
*/    
@Target({elementtype.type}) // 用来说明该注解可以被声明在那些元素之前
/*
    retentionpolicy.source: 注解只保留在源文件中
    retentionpolicy.class : 注解保留在class文件中,在加载到jvm虚拟机时丢弃
    retentionpolicy.runtime: 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解
*/
@Retention // 用来说明该注解类的生命周期
public @interface 注解名{  }
posted @ 2021-03-30 02:07  q-linyu  阅读(225)  评论(0)    收藏  举报