@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是按照名称匹配的。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐