接触springboot快一年了,对微服务的概念越来越熟悉。而自己也慢慢萌生了探索一下源码的想法,写此博客,只为记录一下自己的学习过程。这也是我第一次尝试写系列博客。
我觉得学习springboot,首先需要了解的就是springboot丰富的注解。
常用注解:
1、@SpringBootApplication 申明让spring boot自动给程序进行必要的配置,
等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan
2、@Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。
3、@EnableAutoConfiguration使spring获取约定的配置进行自动配置。(默认从文件META-INF/spring.factories获取自动配置类)
4、@ComponentScan 表示将该类自动发现(扫描)并注册为Bean,可以自动收集所有的Spring组件,
包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。
如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类
5、@EnableScheduling 在 Spring Boot 的配置类中,标注上这个注解,就可以对项目中的方法某些方法使用@Schedule注解,将其变为定时自动执行。
但只有两种注解共同使用时,才能达到本注解应有的作用。(我的项目已经配置了quarz,禁止用这种方式。。。)
6、@Autowired 自动导入依赖的bean,这个注解大家都用过。。
7、@Qualifier 限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者
8、@ImportResource 用来加载xml配置文件,如果你想用xml完全可以的
9、@RestController 返回json字符串的数据,是@Controller和@ResponseBody的合集,直接可以编写RESTFul的接口,返回规则也可配,这里就不多写了
10、@ServletComponentScan spring能够扫描到自己编写的servlet和filter,
SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener,
可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码
11、@Import({DynamicDataSourceRegister.class}) 注册动态多数据源(很少用)
12、@PropertySource(value = “classpath:spring/config.properties”)
通过@PropertySource注解将properties配置文件中的值存储到Spring的 Environment中,Environment接口提供方法去读取配置文件中的值,
参数是properties文件中定义的key值。上面是读取一个配置文件,如果你想要读取多个配置文件,请看下面代码片段
@PropertySource(value = {“classpath:spring/config.properties”,”classpath:spring/news.properties”}) (很少用)
13、@EnableWebSocketMessageBroker 表示开启使用STOMP协议来传输基于代理的消息,Broker就是代理的意思(很少用)
14、@Repository、@Service、@Controller,它们分别对应存储层 Bean,业务层 Bean,和展示层 Bean,将类标识为 Bean;
分别用于软件系统的不同层次:
@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
@Service 通常作用在业务层,但是目前该功能与 @Component 相同。
@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。
通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象,
并注册到 ApplicationContext 中。这些类就成了 Spring 受管组件。这三个注解除了作用于不同软件层次的类,
其使用方式与 @Repository 是完全相同的。
15、@Value(“${spring.datasource.url}”) 获取 application 配置文件中的变量
16、@ConfigurationProperties 读取application属性配置文件中的属性
17、@ControllerAdvice 全局异常处理类,以将对于控制器的全局配置放在同一个位置。
- 注解了@Controller的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。
- ControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上
- ExceptionHandler:用于全局处理控制器里的异常。
- InitBinder:用来设置WebDataBinder,用于自动绑定前台请求参数到Model中。
- ModelAttribute:本来作用是绑定键值对到Model中,此处让全局的@RequestMapping都能获得在此处设置的键值对。
18、@WebFilter 将一个实现了javax.servlet.Filter接口的类定义为过滤器
- 属性filterName声明过滤器的名称,可选
- 属性urlPatterns指定要过滤的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性)
19、@Scope(“prototype”) Spring默认产生的bean是单例的,”prototype” 表示原型即每次都会new一个新的出来
20、@Bean标注在方法上(返回某个实例的方法),作用为注册bean对象
- @Bean注解在返回实例的方法上,如果未通过@Bean指定bean的名称,则默认与标注的方法名相同;
- @Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;
- 既然@Bean的作用是注册bean对象,那么完全可以使用@Component、@Controller、@Service、@Ripository等
注解注册bean,当然需要配置@ComponentScan注解进行自动扫描
21、@EnableAspectJAutoProxy表示开启AOP代理自动配置,如果配@EnableAspectJAutoProxy表示使用cglib进行代理对象的生成;设置@EnableAspectJAutoProxy(exposeProxy=true)表示通过aop框架暴露该代理对象,aopContext能够访问.
Controller层常用注解:
1、@PathVariable 当使用@RequestMapping URI template 样式映射时,即 someUrl/{paramId},
这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上
2、@RequestHeader 可以把Request请求header部分的值绑定到方法的参数上如(@RequestHeader("Accept-Encoding") String encoding){}
。
3、@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上如(@CookieValue("JSESSIONID") String cookie){}
4、
@RequestParam
- 常用来处理简单类型的绑定,通过 Request.getParameter() 获取的String可直接转换为简单类型的情况
( String–> 简单类型的转换操作由ConversionService配置的转换器来完成);
因为使用request.getParameter()方式获取参数,所 以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值; - 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;
- 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;
5、@RequestBody 通过使用HandlerAdapter默认配置的HttpMessageConverters来解析Request请求的Body部分数据并将相应的数据绑定到Controller中方法的参数上,其常用来处理Content-Type不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等。
- 它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
- 因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个
MultiValueMap<String, String>
里,这种情况在某些特殊需求下使用。
6、@SessionAttributes 用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。
该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute 对象
7、@ModelAttribute 该注解有两个用法,一个是用于方法上,一个是用于参数上:
- 用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
- 用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:
- @SessionAttributes 启用的attribute 对象上;
- @ModelAttribute 用于方法上时指定的model对象;
- 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中,
这种方式实际的效果就是在调用@RequestMapping的方法之前,为request对象的model里put(“account”, Account)