Java常用 @注解
@RequestParam注解@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。RequestParam可以接受简单类型的属性,也可以接受对象类型。@RequestParam有三个配置参数:required 表示是否必须,默认为 true,必须。defaultValue 可设置请求参数的默认值。value 为接收url的参数名(相当于key值)。在参数
@Scope("prototype")
可以通知Spring把被注解的Bean变成多例
@Primary注解
意思是在众多相同的bean中,优先使用用@Primary注解的bean
@JSONField注解
fastjson中的注解
@JSONField(ordinal =0) 序列化字段的顺序,默认是0
@JSONField(name = “”) 用于解决属性名和key不一致的情况,当前端传过来的字段名不一样的时候,我们可以在字段名上加上这个注解
@JSONField(format = “yyyy-MM-dd HH:mm:ss”) 用在Date属性上,自动格式化日期
@JSONField(serialize = false) 是否要把这个字段序列化成JSON字符串,默认是true
@JSONField(deserialize = false) 字段是否需要进行反序列化,默认是true
@PostConstruct注解
@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。
@Param注解
public User selectUser(@Param("userName") String name,@Param("password") String pwd);
映射到xml中的<select>标签
<select id="selectUser" resultMap="User">
select * from user where user_name = #{userName} and user_password=#{password}
</select>
注意点
- 当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},${}取值都可以。
- 当不使用@Param注解声明参数的时候,必须使用的是#{}来取参数。使用${}方式取值会报错。
- 不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。
@Select("SELECT * from Table where id = #{id}") Enchashment selectUserById(User user);
@Scheduled注解
作用:spring定时器(定时执行一次或定时轮询执行一段代码) 。启动类上加 @EnableScheduling 注解
该参数接收一个cron表达式
,cron表达式
是一个字符串,字符串以5或6个空格隔开,分开共6或7个域,每一个域代表一个含义。
[秒] [分] [小时] [日] [月] [周] [年]
示例
#每天23:59:00执行一次
@Scheduled(cron = "0 59 23 * * ?")
#每两分钟执行一次
@Scheduled(cron = "0 0/2 * * * ? ")
@Scheduled(cron="${accountExpire.cron}")
@Value注解
使用@Value方式获取application配置文件中参数
application.yml中配置:
test:
msg: hello springboot
使用@Value方式
import org.springframework.beans.factory.annotation.Value;
@RestController
@Component
public class WebController {
@Value("${test.msg}")
private String msg;
@RequestMapping("/index1")
public String index1() {
return "方式一:" + msg;
}
}
//@Value注入static属性
private static String name;
@Value("${person.name}")
private String s;
@PostConstruct
public void init() {
name = s;
}
//Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
- 类不能用new,通过@Autowired 方式,将这个类引入即可。
- 不能使用static的属性
- 类上别忘了加@Component,让spring管理起来
@ConfigurationProperties
@ConfigurationProperties 注解用于将配置文件中的属性绑定到Java对象中。这使得配置管理更加简洁和方便。特别存在多个属性时比上面@value使用更加简单
@Data
@ConfigurationProperties(prefix = "test.msg")
public class Test {
private String msg;
@Component注解
@Component用于标记一个类为组件,所以会被@SpringBootApplication注解扫描。它可以像普通Bean一样利用@Autowired和@Value注入泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
import org.springframework.stereotype.Component;
@Component
public class SmsSender {
@RequestParam注解
@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。
RequestParam可以接受简单类型的属性,也可以接受对象类型。
@RequestParam有三个配置参数:
- required 表示是否必须,默认为 true,必须。
- defaultValue 可设置请求参数的默认值。
- value 为接收url的参数名(相当于key值)。
在参数不存在的情况下,可能希望变量有一个默认值:
functionName(@RequestParam(value="id[]",required=false) List<String> id,...
注:参数名称必须与value里面的完全一样,包括那个[]。如果前台用的框架传数组没有那个[],则可以取消掉[]改成"id"
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* springboot解决tomcat拦截GET请求中特殊字符
*
* @author Administrator
*/
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((Connector connector) -> {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
});
return factory;
}
}
@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。
@RequestBody注解
注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。
就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。
GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用
HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。
@Slf4j注解
然后使用log打印日志
import lombok.extern.slf4j.Slf4j;
@Slf4j
class LogTest {
@Test
void testLog() {
String testInfo = "Free flying flowers are like dreams";
log.info("The test info is :{}", testInfo);
}
}
@Autowire注解完成属性装配
@Autowired
private NumberService numberService;
public void save() {
numberService.findNumber(number);
}
Autowired装配的是bean
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
//@Configuration 相当于 spring中的 application.xml
public class ConfigBean {
}
@Pattern注解
验证表达式,用于String类型
@Pattern(message = "白名单限制规则:只能为[enable|disable]", regexp = "^(enable|disable)$")
private String white;
@NotNull,@NotBlank,@NotEmpty三个注解
@NotEmpty 用在集合类上面
加了@NotEmpty的String类、Collection、Map、数组,是不能为null或者长度为0的(String Collection Map的isEmpty()方法)
@NotBlank只用于String类型上,不能为null且trim()之后size>0。
@NotNull:不能为null,但可以为empty,没有Size的约束。用其做Integer类型字段的校验。而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制
@NotNull(message = "每页条数不能为空")
@Min(value = 10, message = "每页条数最小为10")
private Integer pageSize;
@Autowired、@Inject、@Resource三者区别
在我们开发spring相关的应用系统时,使用@Autowired、@Resource作为Bean的注入,是比较常见的。@Inject这个注解我是比较晚(毕竟比@Resource 对应的规范出来的晚,JSR330>JSR250嘻嘻)才使用到的。
- 1)@Autowired是spring自带的注解,@Resource是JSR250规范实现的,@Inject是JSR330规范实现的,需要导入不同的包;
- 2)@Resource如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
- 3)@Autowired、@Inject用法基本一样,不同的是@Autowired有一个request属性;
- 4)@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用;
- 5)@Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)