Spring 註解大全

1、Spring Core系列

一、@Autowired

@Autowired標記Spring將要解析和注入的依賴項。咱們可使用構造函數、setter或字段注入來使用這個註釋。java

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

二、@Bean

@Bean註解用於產生一個Bean對象,而後這個Bean對象交給Spring管理spring

三、@Qualifier

@Qualifier配合@Autowired來指定bean的id或b名稱。app

@Autowired
@Qualifier("class1")
Class1 class1;
複製代碼

四、@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>
複製代碼

2、Spring Web系列

一、@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。ui

二、@RequestBody

@RequestBody將http請求表單映射成對象this

@PostMapping("/save")
public void save(@RequestBody Car car) {
    // ...
}
複製代碼

三、@PathVariable

@PathVariable代表方法參數綁定到URI模板變量。咱們可使用@RequestMapping註釋指定URI模板,並使用@PathVariable將方法參數綁定到模板部件之一。spa

@RequestMapping("/{id}")
public Car getCar(@PathVariable("id") long id) {
}
複製代碼

四、@RequestParam

@RequestParam映射HTTP請求參數code

@RequestMapping
public Car getCar(@RequestParam("id") long id) {
}
複製代碼

五、@ResponseBody

@responseBody註解將controller的方法返回的對象經過適當的轉換器轉換爲指定的格式以後,寫入到response對象的body區,一般用來返回JSON數據或者是XMLcdn

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

六、@ExceptionHandler

聲明一個定製的錯誤處理程序方法。請求處理程序方法拋出任何指定的異常時,Spring調用此方法。

@ExceptionHandler(IllegalArgumentException.class)
public void onIllegalArgumentException(IllegalArgumentException exception) {
    // ...
}
複製代碼

七、@Controller

@Controller定義一個Spring MVC控制器

八、@RestController

@RestController 等於@controller加@ResponseBody的結合

3、Spring Bean系列

一、@ComponentScan

@ComponentScan 聲明自動掃描某一個包或類

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

二、@Component

@Component泛指組件,當組件很差歸類的時候使用,把普通pojo實例化到spring容器中

三、@Service

@Service用於標註業務層組件

四、@Repository

@Repository用於標註數據訪問組件,即DAO組件.

五、@Configuration

@Configuration用於定義配置類,可替換xml配置文件,被註解的類內部包含有一個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器。

@Configuration
class DemoConfig {
    @Bean
    public Car car() {
        return new Car();
    }
}
複製代碼

4、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");
	    }
	}
}
複製代碼

5、SpringBoot系列

一、@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);
    }
}
複製代碼

二、@EnableAutoConfiguration

@EnableAutoConfiguration,顧名思義,支持自動配置。這意味着Spring Boot在類路徑上尋找自動配置bean,並自動應用它們。

三、@ConditionalOnClas, @ConditionalOnMissingClass

條件註解:Spring只會在註解參數中的類存在/不存在時使用標記的自動配置bean

@Configuration
@ConditionalOnClass(DataSource.class)
public class DbConfiguration {
    //...
}
複製代碼

四、@ConditionalOnBean, @ConditionalOnMissingBean

條件註解:Spring只會在註解參數中的Bean存在/不存在時使用標記的自動配置bean

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

四、@ConditionalOnResource

咱們可讓Spring只在特定資源存在時才使用定義:

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

5、SpringData系列

一、@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> {}
複製代碼

二、@Query,@Param

@Query直接定義查詢語句
@Param註解查詢參數

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

三、@Id

@Id將一個字段標記爲主鍵

@Entity 
public class Person {
    @Id
    private Long id;
}
複製代碼

四、@Transient

@Transient標記的字段,數據存儲引擎將不會進行讀寫

@Entity 
public class Person {
    @Transient
   private int age;
}
複製代碼

四、@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;
}
複製代碼

五、@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全家桶中涉及到的註解遠遠不止上述描述這些,篇幅有限,不能一一列舉。僅供學習參考。


喜歡能夠關注公衆號: 終身幼稚園

終身幼稚園
相關文章
相關標籤/搜索