SpringBoot和一些第3方组件的一些注解

1、SpringBoot的注解

1.1、一些程序步骤的注解

@Service

用于标注业务层组件。	

@Repository

用于标注数据访问组件,即DAO组件。	

@Component

泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。	

@Configuration

表名类里的包含@Bean注解标注的方法。	

被标注@Configuration的配置类为Full模式,否则为Lite模式。
在Spring 5.2之后新增了一种case也算作Lite模式:@Configuration(proxyBeanMethods = false),此值默认是true。
Full模式下运行时会给该类生成一个CGLIB子类放进容器,有一定的性能、时间开销。@Bean方法 不可以是private、不可以是final。
Lite模式下运行时不再需要给对应类生成CGLIB子类,提高了运行性能,降低了启动时间。@Bean方法 可以是private、可以是final。

@Bean

用在@Configuration注解下的类里面的方法上。	

@MapperScan 和 @Mapper

在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper将mapper注入到Spring,但是如果每一给mapper都添加@mapper注解会很麻烦,这时可以使用@MapperScan注解来扫描包。	
经测试发现,@MapperScan注解只会扫描包中的接口,不会扫描类,所以可以在包中写Provider类。

@MapperScan(“com.demo.mapper”)

扫描指定包中的接口。

@MapperScan(“com.demo.*.mapper”)

一个*代表任意字符串,但只代表一级包,比如可以扫到com.demo.aaa.mapper,不能扫到com.demo.aaa.bbb.mapper。

@MapperScan(“com.demo.**.mapper”)

两个*代表任意个包,比如可以扫到com.demo.aaa.mapper,也可以扫到com.demo.aaa.bbb.mapper。

@AutoWired 和 @Qualifier

当一个接口有2个不同实现时,使用@Autowired注解时会报错,这时可以和 @Qualifier 配合使用。

@AutoWired

自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

注:如果多个实现时可用 Map<String,Service> map处理,取值时用 map.get(实现类名) 获取。
xxx [] arys;

@Qualifier

当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定(为实现类上注解的名字),与@Autowired配合使用。
@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者

@scope(“prototype”)

singleton单例模式(全局有且仅有一个实例)。
prototype原型模式(每次获取Bean的时候会有一个新的实例)。
request(request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效)。
session(session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效)。
global session(global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。)。

@Value("${xxx}")

注入Spring boot application.properties配置的属性的值。

1.2、一些跟前端交互的注解

@RestController 和 @Controller

@RestController 相当于 @Controller+@ResponseBody 合在一起的作用。

1.如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

2.如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。

@ResponseBody的作用

是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

@ResponseBody
public User login(User user){
	return user;
} 

相当于:
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
	response.getWriter.write(JSONObject.fromObject(user).toString());
}

@RequestMapping(value="/addUser/{userName}", method= RequestMethod.PUT)

提供路由信息,负责URL到Controller中的具体函数的映射。

@PathVariable

从url中获取参数值,可以定义多个,跟@RequestMapping结合使用(使用方括号加参数名)。

@RequestParam 和 @RequestBody

可以一起用,这时的@RequestBody 是输出所有参数(后端接口参数类型只能是 String)--可以不用看。

@RequestParam

需要前端传递单独参数。

@RequestBody

需要前端传递请求体。后端接口参数最多只能有一个,后端接口参数可以是基本类型,可以是类类型(前端必须传递 json)。

@Valid

启动参数验证,验证@RequestBody的实体参数校验。

@Validated

启动参数校验。

注:当用方法来调用接口验证时可用如下

import javax.validation

// 定义验证组
interface NewValid{};

private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
public static<T> Map<String, StringBuffer> validate(T obj, Class.. groups){
	Map<String, StringBuffer> errorMap = null;
	Set<ConstraintViolation<T>> set;
	if(groups == null || groups.length == 0){
		set = validator.validate(obj, Default.class);
	} else {
		set = validator.validate(obj, groups);
	}
	if(set != null && set.size() >0){
		errorMap = new HashMap<>();
		String property;
		for(ConstraintViolation<T> cv : set){
			property = cv.getPropertyPath().toString();
			if(errorMap.get(property) != null){
				errorMap.get(property).append(",").append(cv.getMessage());
			} else {
				StringBuffer sb = new StringBuffer();
				sb.append(cv.getMessage());
				errorMap.put(property, sb);
			}
		}
	}
	return errorMap;
}

public void test(){
	Map<String, StringBuffer> validate = validate(user, NewValid.class);
}

1.3、一些模型验证的注解

@Min(value = 0, message = “状态格式不正确”)

最小值。

@Max(value = 1, message = “状态格式不正确”)

最大值。

@NotBlank(message = “用户名不能为空”)

不能null和空字符串。

@Pattern(regexp = RegexUtils.password,message = “密码格式不正确”)

正则表达式。

注:如果是List,则在里面写注解。

1.4、一些大范围的注解

@SpringBootApplication(scanBasePackages=“xxx.xxx”):

属性作用是增加其他模块的包的扫描。

该注解替代@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。

@EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器。

@ComponentScan:ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,将这些bean定义加载到IoC容器中。
我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。
所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。

@ServletComponentScan

Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册。

@WebFilter(filterName=“logCostFilter”, urlPatterns="/*")

过滤器。

@Order(1)

过滤器排序。

@WebListener

监听器。

@WebServlet

Servlet。

1.5、全局异常的注解

@ControllerAdvice 和 @ExceptionHandler(value = { Exception.class })

激活全局异常的注解。

1.6、定时任务的注解

@EnableScheduling

定时任务开关。

@EnableAsync

方法按周期新启动一个线程异步开关。

@Scheduled(cron = “0/5 * * * * ?”)

配置定时任务。

@Async

方法按周期新启动一个线程。

2、第3方组件的一些注解

2.1、Swagger的注解

@Api(tags={“xxx操作接口”})

修饰整个类,描述Controller的作用。

@ApiOperation(value=“添加用户”, notes="")

描述一个类的一个方法,或者说一个接口。

@ApiParam(name = “reqVO”)

单个参数描述。

@ApiModel

用对象来接收参数。

@ApiModelProperty(value=“用户名”)

用对象接收参数时,描述对象的一个字段。

2.2、Shiro的注解

@RequiresPermissions(“pm-account:add”)

注解在方法中,所需要的权限值。

2.3、Apollo的注解

@EnableApolloConfig({“application”,“tec.base”})

启动项目会在resource寻找Apollo的url配置文件。

@ApolloConfig(“tec.base”)

将Apollo服务端的中的配置注入这个类中。

@ApolloConfigChangeListener

监听配置中心配置的更新事件,若该事件发生,则调用refreshLoggingLevels方法,处理该事件。

2.4、Dubbo的注解

@Service(version = “1.0.0”,interfaceClass = ProviderService.class)

标记为服务。

@Reference(version = “1.0.0”,loadbalance=“roundrobin”, check = false)

服务引用。

2.5、slf4j日志的注解

@Slf4j

在类上打上@Slf4j注解,然后log变量使用,需要安装Lombok插件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值