注解含义集合 @ 什么什么-不断更新

@JsonSerialize(using = ToStringSerializer.class)

用于解决后端传递给前端 js 导致的精度失真问题

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@JsonSerialize(using = ToStringSerializer.class)
    private Long skuId;
@Value

SpringBoot 中yml 文件的获取,不要加 static ,否则无法注入

@Value("${a.b.c}")
private String name;
@SuppressWarnings(“unused”)

表示该属性在方法或类中没有使用。添加此注解可以去除属性上的黄色警告!!!

@PostConstruct

The PostConstruct annotation is used on a method that needs to be executed after dependency injection is done to perform any initialization. This method MUST be invoked before the class is put into service. This annotation MUST be supported on all classes that support dependency injection. The method annotated with PostConstruct MUST be invoked even if the class does not request any resources to be injected. Only one method can be annotated with this annotation. The method on which the PostConstruct annotation is applied MUST fulfill all of the following criteria:
该注解注释的方法必须在利用依赖注入完成实例化之后立刻进行,是jdk的注解,但是一来 Spring 发挥作用,所在方法必须是可以被Spring 实例化的类

@DirtiesContext

用于Spring测试,@DirtiesContext 表示 applicationContext 不被缓存,可能会影响测试速度,但是可以避免一些由于缓存而导致的问题,每一次测试之间不再受相互影响。
可以区分类与方法
类的选项有四个 BEFORE_CLASS,BEFORE_EACH_TEST_METHOD,AFTER_EACH_TEST_METHOD,AFTER_CLASS;

@DirtiesContext(classMode= DirtiesContext.ClassMode.AFTER_CLASS)
public abstract class BaseTest {}

方法级别有两个 BEFORE_METHOD,AFTER_METHOD;

 @DirtiesContext(methodMode = DirtiesContext.MethodMode.AFTER_METHOD)
    @Test
    public void test(){
    }
lombok:@Data@Builder@AllArgsConstructor@NoArgsConstructor@Getter@Setter@ToString@SneakyThrows
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
其中 @Data 等同于 @Getter+@Setter,当类存在相互引用时,@Data会导致stackOverFlow,原因是覆盖重写了hashcode方法

@SneakyThrows 的作用比较神奇,相当于自动给代码增加一个 try···catch,并且支持再次抛出指定异常

@SneakyThrows(value=NullPointerException.class)
  public void run() {
    throw new Throwable();
  }
  @SneakyThrows
  public void run2() {
    throw new Throwable();
  }
public void run2() {
    try {
      throw new Throwable();
    } catch (NullPointException t) {
      throw t;
    }
  }
public void run2() {
    try {
      throw new Throwable();
    } catch (Throwable t) {
      throw Lombok.sneakyThrow(t);
    }
  }
@Primary

Primary可以理解为默认优先选择,在定义通类型Bean的时候使用,比如一个接口两个实现类.
一般和@Bean联合使用
内部实质是设置BeanDefinition的primary属性
其作用类似于

@ComponentScan、@Configuration、@PropertySource

属于 JavaConfig 代码,配置自动扫描发现被@Component等标注的类注册为 Spring 的bean,功能上等同于<context:component-scan base-package="">
@ComponentScan 修饰的类或接口,配置类所在的包被称为基础包,基础包和子包会被扫描
@ComponentScan 可以指定扫描的包
@PropertySource 可以用于以注解的方式加载常量配置文件

		//基础包
		@ComponentScan
		@ComponentScan("service")
		@ComponentScan(basePackages="service")
		
		//其他包
		@ComponentScan("com.bestcxx.stu.*.service.impl")
		
		//指定包,多个
		@ComponentScan(basePackages={"com.bestcxx.stu.*.a","com.bestcxx.stu.*.b"})
		
		//指定类-重构的话不会出错
		@ComponentScan(basePackageClasses={UserInfoServiceAImpl.class})
		

@Configuration 表明被修饰的类或接口是配置性质的,不需要任何功能或者逻辑代码

	//javaConfig 配置扫描作用的类
	@ComponentScan
	@Configuration
	public class UserInfoServiceConfig {
	
	}
	//对应测试方法,一般 Spring 环境
	@RunWith(SpringJUnit4ClassRunner.class)  
	@ContextConfiguration(classes = UserInfoServiceConfig.class)
	
	//对应测试方法为SpringBoot 环境
	@RunWith(SpringRunner.class)  
	@SpringBootTest(classes = UserInfoServiceConfig.class) 
	

@PropertySource

 @Configuration
 @PropertySource("classpath:/com/myco/app.properties")
@Bean、@Configuration、@Import和@ImportResource

用于声明 Spring Bean
需要扫描所在类
标注于方法上,该方法需 return 一个对象,该对象会被Spring 声明一个Bean
该方法可以直接作为构造方法的入参被注入到另一个Bean中
默认情况下,bean的ID与带有@Bean注解的方法名是一样的,可以自定义名字。
通过构造器方法可以实现注入的功能,而注入的写 被@Bean 标注的方法即可
@Configuration仅表示被标注的类为配置类,无实质作用
@Import 可以再JavaConfig类中引用其他JavaConfig类 如:@Import(BottomConfig.class)
@ImportResource 可以在JavaConfig类中引入XMl配置文件 ,如:@ImportResource(“classpath:spring/applicationContext-bean2.xml”)

代码示例
https://github.com/Bestcxy/Basic/tree/master/springconfigurationbean/basic

/**接口类,无任何标注*/
public interface ShowService {	
 public void writeName(String name);
}
	
/**接口实现类*/
public class ShowServiceImpl implements ShowService {
	public void writeName(String name) {
		System.out.println("You Write Name is "+name);
	}
}	

/**JavaConfig 类*/
@Configuration
public class TopConfig {
	@Bean
	public ShowService getShowService(){
		return new ShowServiceImpl();
	}
}

/**xml中将TopConfig 注册为 Bean*/
<bean class="com.bestcxx.stu.basic.config.TopConfig"></bean>

/**controller 中调用ShowService ,自动注入 ShowServiceImpl*/
@Autowired
private ShowService showService;
	
@GetMapping(value={"/home","/"})  
public String homePage(){  
	showService.writeName("Jecket");
    return "home";  
}  

/**@Bean 的另外的用法*/
public class StageServiceImpl{
	private ShowService showService;
	public StageServiceImpl(){}
	public StageServiceImpl(ShowService showService){
		this.showService=showService;
	}
	public void buildStage(){
		System.out.println("Stage Is Ok");
	}
}

@Bean
public ShowService getShowService(){
	return new ShowServiceImpl();
}

/**注入并生成 Spring Bean*/
@Bean
public StageServiceImpl getStageService(){
	return new StageServiceImpl(```getShowService()```);
}

/**调用*/
@Autowired
private StageServiceImpl StageServiceImpl;

@RequestMapping、 @GetMapping、@PutMapping、@DeleteMapping、@PostMapping

@RequestMapping,Spring 中用于设定控制层的访问路径,不限定请求形式,Get、Post、Put、Delete
@GetMapping,Spring 中用于设定控制层的访问路径,限定请求形式为Get,一般对应查询
@PutMapping,Spring 中用于设定控制层的访问路径,限定请求形式为Put,一般对应修改
@DeleteMapping,Spring 中用于设定控制层的访问路径,限定请求形式为Delete,一般对应删除
@PostMapping,Spring 中用于设定控制层的访问路径,限定请求形式为Post,一般对应新增

@RestController、@ResponseBody

@RestController 相当于 @Controller+@ResponseBody,专门用于 RESTful 风格编程中标注 控制层 Bean,返回参数直接序列化。 当使用 @Controller 标注 控制层 Bean 时,在 内部方法上标注 @ResponseBody 也可以实现方法返参的序列化
@RestController 的效率要比 @Controller+@ResponseBody 的效率高

@ Autowired 、 @Resource、@Inject

用于注入 Bean
可以用在 字段或对象声明构造器 set 方法
@Autowired 为 Spring 标准;@Resource 为 jsr250 标准,是Java 标准 ;@Inject 是 jsr330 标准,是Java 标准
@Autowired 默认是 byType 注入,联合使用 @Qualifier(“name”) 即为 byName 注入,有一个特殊属性允许注入不存在 @Autowired(required=false)
@Resource 默认为 byName 注入,byName不存在按照byType,都不存在会报错,可以指定注入的 Bean 的名字 @Resource(name=“my”)
@Inject,默认为 byType 注入,联合使用 @Qualifier(“name”) 即为 byName 注入,注入不存在会报错

  <!--Maven 依赖-->
  <!-- jsr330 @Inject -->
  <dependency>
     <groupId>javax.inject</groupId>
     <artifactId>javax.inject</artifactId>
     <version>1</version>
  </dependency>
  <!-- jsr250 @Resource -->
  <dependency>
  	<groupId>javax.annotation</groupId>
  	<artifactId>jsr250-api</artifactId>
  	<version>1.0</version>
  </dependency>
@JsonIgnore
> import com.fasterxml.jackson.annotation.JsonIgnore;
> 作用:序列化和反序列化忽略此属性。常用于DTO类,你使用实体时可用该实行,返回给地用方时,会自动忽略该字段。
@Component、@Repository、@Service、@Controller和@Named

表示 Spring 的 Bean 。
@Controller 标注控制层 Bean,@Controller (“自定义名字”)用于自定义名字
@Service 标注业务层 Bean,@Service (“自定义名字”)用于自定义名字
@Repository 标注存储层 Bean,@Repository(“自定义名字”)用于自定义名字
@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注,@Component(“自定义名字”)用于自定义名字
@Named 是jsr330 标准,作用和@Component一样,@Named(“自定义名字”)用于自定义名字

@Scope(“prototype”) 或@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

@Scope(“prototype”)或@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE),属于Spring。
默认情况下,Spring 的Bean 都是单例模式的,下面列举Spring Bean 的作用域配置
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 每次请求新建一个实例
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) 所有请求共享一个单例
@Scope(WebApplicationContext.SCOPE_REQUEST) web请求,一次请求新建一个实例
@Scope(WebApplicationContext.SCOPE_SESSION) web请求,一个 session 生命周期内共享一个实例
@Scope(WebApplicationContext.SCOPE_GLOBAL_SESSION) web请求,所有的 session 生命周期内共享一个实例

@XmlRootElement(name=“date”)

标注于类名上,表示该类转化为xml报文时,最外围元素名称为 name,< name></ name>

@XmlAccessorType(XmlAccessType.PROPERTY)、@XmlAccessorType(XmlAccessType.FIELD)、@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)、@XmlAccessorType(XmlAccessType.NONE)

标注于类上,用于限定类中那些成员可以被转化为 xml 中的元素,当然要在 JAXB-bound class ,即被 @XmlRootElement 的类中
XmlAccessType.PROPERTY:具有getter或setter的成员变量才会和 XML 绑定,除非被@XmlTransient 标注,绑定 XML 的意思是该成员变量参与 XML 与 Java Bean 的转化
XmlAccessType.FIELD:非静态、未被 @transient 标注的成员变量都会被和 XML 绑定
XmlAccessType.PUBLIC_MEMBER:所有被 public 修饰的成员变量,或者具有 public 修饰的 getter/setter 方法的成员变量都会和 XML 绑定,除非被 @XmlTransient 标注
XmlAccessType.NONE:如果没有特别的标注,没有成员变量会绑定XML

@XmlElement(name=“自定义”)

标注于成员变量上,可以自定义成员变量的名字
如果节点是list类型,则每一个节点的名字都会是 <自定义></自定义>

@XmlElements

如果集合中有多种数据类型,可以给每一种数据类型单独指定节点名称

@XmlElements(value = { @XmlElement(name="item",type=InsureBillSessionBodyItemDTO.class)})
@XmlElementWrapper(name = “Items”)

对于集合类的节点,@XmlElement 不会单独提出一个节点,@XmlElementWrapper(name = “Items”)会单独提出一个节点,集合内数据再作为单独的节点.
该节点默认子节点名字为变量名字,如果想自定义可以使用 @XmlElement(name=“自定义”)

@XmlElementWrapper(name = "Items")
@XmlElement(name="Item")
private List<DemoClass> list;

得到

<Items>
    <Item>
         <CustomerNumber>123</CustomerNumber>
     </Item>
     <Item>
         <CustomerNumber>456</CustomerNumber>
     </Item>
 </Items>
@XmlAttribute(name = “default_self_name”)

用于实体类型节点自定义子属性,

@XmlAttribute(name = "default_self_name")
    private String id="default_self_value";
    public String getId() {  return id;}
    public void setId(String id) {= this.id = id;  }

得到

  <节点 default_self_name="default_self_value">
  </节点>
@XmlType(propOrder = { “demoA”, “demoB”})

可以指定xml中子节点的顺序

@UtilityClass

import lombok.experimental.UtilityClass;
标记静态方法类。效果如下
1、final类
2、自动生成一个私有无参构造函数
3、方法、内部类、变量 标记成statis
4、static import时必须带*号

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值