1-声明bean(注册)
@Component 使用在类上,标注spring管理的bean, 使用它则表示将此类标记为spring容器的一个bean
在此注解上又扩展的以下三个注解:
a: @Repository dao层上使用 例如 mapper上常定义此
b: @Service service层上使用 例如 service上
c: @Controller 控制层(web层)上使用
c1: @RestController @Controller的扩展,= @Controller+@ResponseBody
1-1 web层上的注解:
a-路由请求
@RequestMapping 路由请求,可以设置各种操作方法
属性value:值-路径 method 方法- post,get等 params,header,consume,product
@GetMapping @RequestMapping 的扩展 处理get请求
@PostMapping @RequestMapping 的扩展 处理post请求
@PutMapping @RequestMapping 的扩展 处理put请求
@DeleteMapping @RequestMapping 的扩展 处理delete请求
@PatchMapping @RequestMapping 的扩展 处理patch请求
b-请求参数
@PathVariable 处理请求 url 路径中的参数 /user/{id}
@RequestParam 处理问号后面的参数
@RequestBody 请求参数以json格式提交
c-返回参数
@ResponseBody 返回json格式数据
2-注入bean(使用)自动注入(装配):将spring容器中的bean 自动的和我们需要的这个bean的类组装在一起
@Autowired : spring本身,默认 按bytype自动注入。注意有一个require属性,默认true,为false,找不到不报错
@inject:JSR-330 使用同@Autowired ,不同点在于无属性,没有找到报错
@Resource : Spring JSR-250 提供 ,有两个属性注入 type 和 name,默认按 byname 自动注入
3-配置注解
@Configuration 声明当前类为配置类,并会被cglib代理进行增强,并保证@Bean的对象作用域受控制,避免多例
@ComponentScan 用于对Component进行扫描
@Bean 替代xml中的方式,用于方法上
属性的支持,要使用以下注解
@Scope 配合 @Bean 使用在方法上,配合@Component 使用在类上 ,不能单独进行使用
对应的设置类型有:
Singleton 单例模式(默认方式),spring容器中只有一个该bean的实例,单例的bean在Spring容器初始化时就被直接创建,不需要通过proxyMode指定作用域代理类型
prototype原型范围,每次注入调用,Spring都会创建返回不同的实例。
reqeust 每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
Session 会话级别 每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
@PostConstruct 被用来修饰一个非静态的void()方法,该注解的方法将会在依赖注入完成后被自动调用,调用顺序:Constructor >> @Autowired >> @PostConstruct
注意:在某些业务场景下我们需要程序在启动的时候就加载某些数据,比如,在程序启动的过程中需要从数据库中加载数据并缓存到程序的内存中
此注解JSR-250提供,在构造函数执行完之后执行,等价于xml配置文件中bean的initMethod
@PreDestory 此注解JSR-250提供,在Bean销毁之前执行,等价于xml配置文件中bean的destroyMethod
@MapperScan 添加对mapper包扫描,替换在所有的mapper类型使用 @Mapper
@ControllerAdvice 声明一些全局性的东西,比如全局异常处理,配合以下三个方法:(对应controller类)
1- @ExceptionHandler注解标注的方法:用于捕获Controller中抛出的不同类型的异常,从而达到异常全局处理的目的;
2- @InitBinder注解标注的方法:用于请求中注册自定义参数的解析,从而达到自定义请求参数格式的目的;
3- @ModelAttribute注解标注的方法:表示此方法会在执行目标Controller方法之前执行 。
@Enable*相关的注解
@EnableAutoConfiguration 开启自动扫描装配Bean,组合成@SpringBootApplication注解之一
@EnableScheduling 开启计划任务的支持
@EnableTransactionManagement 开启注解式事务的支持。
@EnableCaching 开启注解式的缓存支持。
@EnableAspectJAutoProxy 开启对AspectJ自动代理的支持。
@EnableEurekaServer 开启Euraka Service 的支持,开启spring cloud的服务注册与发现
@EnableDiscoveryClient 开启服务提供者或消费者,客户端的支持,用来注册服务或连接到如Eureka之类的注册中心
@EnableFeignClients 开启Feign功能
@EnableAsync 开启异步方法的支持
@EnableWebMvc 开启Web MVC的配置支持。
@EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持。
@EnableJpaRepositories 开启对Spring Data JPA Repository的支持。
4-切面AOP注解-用于AspectJ的注解式切面编程,常用于拦截器、事务、日志、权限验证 - 常用于生成自定义式注解
@Aspect 用于类上,标识为一个切面容器的读取
类中配合以下注解使用
@After 在方法执行之后执行
@Before 在方法执行之前执行
@Around 有些特殊 ,方法之前的业务 执行的方法 方法之后的业务
@PointCut 声明切点(指向之定义的注解类)
5-属性
@Value
a:为属性注入值 @Value("aaa")private String a;
b:注入操作系统属性 @Value("#{systemProperties['os.name']}")private String b;
c:表达式结果:@Value("#{ T(java.lang.Math).random() * 100.0 }")private double c;
d:注入其他bean属性 @Value("#{config.d}")private String d;
e:注入列表形式 @Value("#{'${words}'.split('\\|')}")private List<String> e;
f:注入文件资源:@Value("classpath:config.xml")private Resource resourceFile Resource的全限定名为org.springframework.core.io.Resource。
g:注入URL资源@Value("http://www.baidu.com")private URL baidu;
6- 异步和定时相关注解
a:一般操作是: 1-基础配置 @Configuration-类 + @@EnableAsync-类 + @Bean-方法 配置一个异步 ,一般使用线程池
2- 执行的业务 @Component-类 + 各个 @Async(@Bean-方法) - 方法
3- 调用异步 @EnableAsyn 开启异步 + 调用的方法 或者在springboot启动方法加上@EnableAsyn 开启异步
b: 一般操作: 1-开启定时 springboot启动方法加上@EnableScheduling
2- 执行的业务 @Component + 各个 @Scheduled
@Scheduled 各个属性:
1- cron表达式 [秒] [分] [小时] [日] [月] [周] [年]
2- cro表达式可以通过占位符(一般通过配置文件,比如属性文件)获取 cron.a.b=*/5 * * * * * @Scheduled(cron="${cron.a.b}") 也可以直接填表达式
3- fixedDelay @Scheduled(fixedDelay = 5000) 表示上一次执行完毕时间后5秒再次执行
4- fixedDelayString 同3 ,但不同点可以使用占位符 a.b=5000 @Scheduled(fixedDelayString = "${a.b}")
5- fixedRate @Scheduled(fixedRate = 5000) //上一次开始执行时间点之后5秒再执行
6- fixedRateString 同5,不同点是可以使用占位符 参考4
7- initialDelay @Scheduled(initialDelay=1000, fixedRate=5000) //第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
8- initialDelayString 同7 不同点是可以使用占位符 参考4