Spring和SpringBoot和Springcloud常用注解及使用
@Component
将一个类标识为Bean,Spring容器根据注解的过滤规则扫描读取注解Bean定义类,并将其注册到Spring IoC容器中,相当于配置文件中的 <bean id="" class=""/>,Component有几个衍生注解:
- dao/mapper[@Repository]:持久层组件,用于标注数据访问组件,即DAO组件。
- service[@Service]:服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,也可以指定bean的名称:@Service(“beanName”)。
- controller[@Controller]:控制层组件,定义一个springMVC的控制器类,往往需要和@RequestMapping配合使用。
@Configuration
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
@Bean
该注解主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。相当于配置文件里的<bean></bean>。
@RequestMapping
@RequestMapping表示共享映射,如果没有指定请求方式,将接收GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT所有的HTTP请求方式。@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 都是HTTP方法特有的快捷方式@RequestMapping的变体,分别对应具体的HTTP请求方式的映射注解。若是想配置请求方式,可以参考下方:
@RequestMapping(value = "/login", method = RequestMethod.GET)
@RequestMapping用于配置控制层的访问URL,可以用在控制器类上和控制器方法上,如果用在控制器类上,则访问类中的方法是要加上控制器类上的路径。
@Autowired
它可以对类成员变量,方法及构造函数进行标注,完成自动装配工作。
@Qualifier
当Spring无法判断出哪个bean应该被注入时,可以使用@Qualifier("")进行制定到具体的bean
@Value
可以在类里调用设置在application.properties里的变量。访问方法是:@Value("${xxx}")
@RestController
相当于@ResponseBody+@Controller合在一起的作用。
- @RequestBody:可以用来接收json格式的字符串,一定是一个字符串
@RequestParam和@PathVariable
两个都是用来处理前端传递过来的参数的,不同的是RequestParam处理的是请求参数,而PathVariable处理的是路径变量
http://localhost/mdeditor/chen?id=39
//输出39 @RequestMapping("/mededitor/chen") public String getId(@RequestParam("id") String id){ return id; }
http://localhost/mdeditor/login
//输出login @RequestMapping("/mededitor/{url}") public String redirect(@PathVariable String url){ return url; }
@Accessors(chain = true)
通常用在实体类上,开启链式写法
Springcloud常用注解
@EnableEurekaServer
在主启动类或配置类使用此注解,标识该服务为eureka服务端
服务发现注解
作用都是能够让注册中心发现、并扫描到该服务
-
@EnableEurekaClient:基于spring-cloud-commons,如果⾮eureka的注册中⼼,那么推荐使⽤@EnableDiscoveryClient
-
@EnableDiscoveryClient:基于spring-cloud-netflix,如果选⽤的注册中⼼是eureka,那么就推荐@EnableEurekaClient
@EnableConfigServer
在主启动类或配置类使用此注解,标识该服务为配置中心服务端
@EnableHystrixDashboard
在主启动类或配置类使用此注解,标识该服务为Hystrix-Dashboard服务(仪表盘)。作用是监控服务器的流量
@EnableZuulProxy
在主启动类或配置类使用此注解,标识该服务为Zuul网关服务
Hystrix注解
-
@EnableCircuitBreaker:在主启动类或配置类使用此注解(通常写在服务提供端),标识该服务开启Hytrix
-
@HystrixCommand:配合fallbackMethod属性给该注解的接口实现熔断备选方案
Feign注解
-
@EnableFeignClients:该注解描述的接口为远程服务调用的接口(可能会写在公共类,也可能会写在消费端)。配合上fallbackFactory属性可以实现服务降级操作
-
@FeignClient:用于描述启动类或配置类(通常写在消费端),此时项目启动时,就会启动一个FeignSterter组件,这个组件会对项目中使用@FeignClient的类创建代理对象。通常会指向被@FeignClient所注解的包名称
Ribbon注解
- @LoadBalanced:开启负载均衡的功能,开启负载均衡很简单,只需要在RestTemplate的bean上再添加一个@LoadBalanced注解即可。
- @RibbonClient:在主启动类或配置类使用此注解(通常写在消费端),配合上name属性指向我们eureka上的注册名称来实现负载。此外可以通过configuretion属性指向我们的自定义的配置类来自定义我们的负载算法规则(通常自定义算法类要写在该包外面,写在外面的话我们就可以单独对某个服务注册名来进行自定义算法了,避免被所有的Ribbon客户端所共享,如下所示)
@ComponentScan
@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定义包扫描的规则,然后根据定义的规则找出哪些需类需要自动装配到spring的bean容器中,然后交由spring进行统一管理。
说明:针对标注了@Controller、@Service、@Repository、@Component 的类都可以别spring扫描到。
@SpringBootApplication
@SpringBootApplication来标注这是一个springboot的应用,被标注的类是一个主程序,通常用于我们的启动类。@SpringBootApplication是一个组合注解,一个@SpringbootApplication相当于@Configuration,@EnableAutoConfiguration和 @ComponentScan 并具有他们的默认属性值
说明:由于@SpringBootApplication本身就有@ComponentScan,所以如果当@ComponentScan和@SpringBootApplication一起使用的话,@SpringBootApplication中的@ComponentScan将会失效,这样会导致启动类所在的包,除了被自己加的这个 @ComponentScan 关联的会映射到,原本的反而都映射不到了,所以若是我们坚持这么使用的话,可以使用@ComponentScans注解代替@ComponentScan来扫描我们想要扫描的其他包。
@SpringBootApplication
@ComponentScans({@ComponentScan("com.chen.springcloudapi")})