Spring 注解大全

442 阅读5分钟

一、Spring Core系列

1、@Autowired

@Autowired标记Spring将要解析和注入的依赖项。我们可以使用构造函数、setter或字段注入来使用这个注释。

class Demo {
    Class1 clz1;
    Class2 clz2;
    
    @Autowired
    Class3 clz3;
 
    @Autowired
    Demo(Class1 clz1) {
        this.clz1 = clz1;
    }
    @Autowired
    void setClz2(Class2 clz2){...}
}

2、@Bean

@Bean注解用于产生一个Bean对象,然后这个Bean对象交给Spring管理

3、@Qualifier

@Qualifier配合@Autowired来指定bean的id或b名称。

@Autowired
@Qualifier("class1")
Class1 class1;

4、@Required

@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常

@Required
void setColor(String color) {
    this.color = color;
}
<bean class="com.test.Deom">
    <property name="color" value="green" />
</bean>

二、Spring Web系列

1、@RequestMapping

@RequestMapping在@Controller类中标记请求处理程序方法;

@Controller
class DeomController {
    @RequestMapping(value = "/demo/home", method = RequestMethod.GET)
    public String home() {
        return "home";
    }
}

此外,@GetMapping、@PostMapping、@PutMapping、@DeleteMapping和@PatchMapping是@RequestMapping的不同变体,HTTP方法已经分别设置为GET、POST、PUT、DELETE和PATCH。

2、@RequestBody

@RequestBody将http请求表单映射成对象

@PostMapping("/save")
public void save(@RequestBody Car car) {
    // ...
}

3、@PathVariable

@PathVariable表明方法参数绑定到URI模板变量。我们可以使用@RequestMapping注释指定URI模板,并使用@PathVariable将方法参数绑定到模板部件之一。

@RequestMapping("/{id}")
public Car getCar(@PathVariable("id") long id) {
}

4、@RequestParam

@RequestParam映射HTTP请求参数

@RequestMapping
public Car getCar(@RequestParam("id") long id) {
}

5、@ResponseBody

@responseBody注解将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML

@ResponseBody
@RequestMapping("/hello")
public String hello() {
    return "Hello World!";
}

6、@ExceptionHandler

声明一个定制的错误处理程序方法。请求处理程序方法抛出任何指定的异常时,Spring调用此方法。

@ExceptionHandler(IllegalArgumentException.class)
public void onIllegalArgumentException(IllegalArgumentException exception) {
    // ...
}

7、@Controller

@Controller定义一个Spring MVC控制器

8、@RestController

@RestController 等于@controller加@ResponseBody的结合

三、Spring Bean系列

1、@ComponentScan

@ComponentScan 声明自动扫描某一个包或类

@Configuration
@ComponentScan(basePackages = "com.test")
public class DemoConfig {}

2、@Component

@Component泛指组件,当组件不好归类的时候使用,把普通pojo实例化到spring容器中

3、@Service

@Service用于标注业务层组件

4、@Repository

@Repository用于标注数据访问组件,即DAO组件.

5、@Configuration

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

@Configuration
class DemoConfig {
    @Bean
    public Car car() {
        return new Car();
    }
}

四、Spring AOP系列

@AspectJ: 定义一个切面
@Pointcut: 定义一个切点
@After: 通知方法会在目标方法返回或抛出异常后调用
@AfterRetruening: 通常方法会在目标方法返回后调用
@AfterThrowing: 通知方法会在目标方法抛出异常后调用
@Around: 通知方法将目标方法封装起来
@@Before: 通知方法会在目标方法执行之前执行

@Aspect
public class LogAspcet {
    /**
     * 定义一个公共的切点
     */
    @Pointcut("execution(** com.test.service.*(..))")
    public void log() {
    }

    /**
     * 目标方法执行之前调用
     */
    @Before("log()")
    public void before() {
        System.out.println("before");
    }

    /**
     * 目标方法执行之前调用
     */
    @After("log()")
    public void after() {
        System.out.println("after");
    }

    /**
     * 目标方法执行完后调用
     */
    @AfterReturning("log()")
    public void afterReturning() {
        System.out.println("afterReturning");
    }

    /**
     * 目标方法发生异常时调用
     */
    @AfterThrowing("log()")
    public void afterThrowing() {
        System.out.println("afterThrowing");
    }

	/**
	 * 环绕通知
	 * @param jp 通过它调用目标方法
	 */
    @Around("log()")
	public void around(ProceedingJoinPoint jp) {
	    try {
	        System.out.println("call before");
	        jp.proceed();
	        System.out.println("call after");
	    } catch (Throwable e) {
	        System.out.println("error");
	    }
	}
}

五、SpringBoot系列

1、@SpringBootApplication

@SpringBootApplication用默认属性封装了@Configuration、@EnableAutoConfiguration和@ComponentScan注释。 声明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

2、@EnableAutoConfiguration

@EnableAutoConfiguration,顾名思义,支持自动配置。这意味着Spring Boot在类路径上寻找自动配置bean,并自动应用它们。

3、@ConditionalOnClas, @ConditionalOnMissingClass

条件注解:Spring只会在注解参数中的类存在/不存在时使用标记的自动配置bean

@Configuration
@ConditionalOnClass(DataSource.class)
public class DbConfiguration {
    //...
}

4、@ConditionalOnBean, @ConditionalOnMissingBean

条件注解:Spring只会在注解参数中的Bean存在/不存在时使用标记的自动配置bean

@Bean
@ConditionalOnBean(name = "dataSource")
public DemoBean entityManagerFactory() {
    // ...
}

4、@ConditionalOnResource

我们可以让Spring只在特定资源存在时才使用定义:

@ConditionalOnResource(resources = "classpath:demo.properties")
public Properties demoProperties() {
    // ...
}

五、SpringData系列

1、@NoRepositoryBean

如果想为项目中所有 Repository 创建一个自定义的基 Repository 来让所有继承自该接口的接口共享方法,可以使用 @NoRepositoryBean 注解。 @NoRepositoryBean 注解,这表明 Spring不会在运行时动态生成该接口的实例。

@NoRepositoryBean
interface BaseRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
    Optional<T> findById(ID id);
}
@Repository
interface DemoRepository extends BaseRepository<Person, Long> {}

2、@Query,@Param

@Query直接定义查询语句
@Param注解查询参数

@Query("FROM Person p WHERE p.name = :name")
Person findByName(@Param("name") String name);

3、@Id

@Id将一个字段标记为主键

@Entity 
public class Person {
    @Id
    private Long id;
}

4、@Transient

@Transient标记的字段,数据存储引擎将不会进行读写

@Entity 
public class Person {
    @Transient
   private int age;
}

4、@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy

@CreatedDate
表示该字段为创建时间字段,在这个实体被insert的时候,会设置值
@CreatedBy
表示该字段为创建人,在这个实体被insert的时候,会设置值
@LastModifiedDate
表示该字段为最后修改时间字段,在这个实体被insert,update的时候,会设置值
@LastModifiedBy
表示该字段为最后修改人,在这个实体被insert,update的时候,会设置值

@Entity 
public class Person {
    @CreatedBy
    private User createAt;
     
    @LastModifiedBy
    private User modifyAt;
     
    @CreatedDate
    private Date createdDate;
     
    @LastModifiedDate
    private Date modifyDate;
}

5、@Lock

@Lock配置锁模式,有以下模式:

  • READ
  • WRITE
  • OPTIMISTIC
  • OPTIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_READ
  • PESSIMISTIC_WRITE
  • PESSIMISTIC_FORCE_INCREMENT
  • NONE
interface DeomRepository extends Repository<Persion, Long> {
  @Lock(LockModeType.READ)
  Persion findOne(Long id);
}

总结

Spring全家桶中涉及到的注解远远不止上述描述这些,篇幅有限,不能一一列举。仅供学习参考。


喜欢可以关注公众号: 终身幼稚园

终身幼稚园