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 注解名{ }

浙公网安备 33010602011771号