@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對象交給Spring管理spring
@Qualifier配合@Autowired來指定bean的id或b名稱。app
@Autowired
@Qualifier("class1")
Class1 class1;
複製代碼
@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>
複製代碼
@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將http請求表單映射成對象this
@PostMapping("/save")
public void save(@RequestBody Car car) {
// ...
}
複製代碼
@PathVariable代表方法參數綁定到URI模板變量。咱們可使用@RequestMapping註釋指定URI模板,並使用@PathVariable將方法參數綁定到模板部件之一。spa
@RequestMapping("/{id}")
public Car getCar(@PathVariable("id") long id) {
}
複製代碼
@RequestParam映射HTTP請求參數code
@RequestMapping
public Car getCar(@RequestParam("id") long id) {
}
複製代碼
@responseBody註解將controller的方法返回的對象經過適當的轉換器轉換爲指定的格式以後,寫入到response對象的body區,一般用來返回JSON數據或者是XMLcdn
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "Hello World!";
}
複製代碼
聲明一個定製的錯誤處理程序方法。請求處理程序方法拋出任何指定的異常時,Spring調用此方法。
@ExceptionHandler(IllegalArgumentException.class)
public void onIllegalArgumentException(IllegalArgumentException exception) {
// ...
}
複製代碼
@Controller定義一個Spring MVC控制器
@RestController 等於@controller加@ResponseBody的結合
@ComponentScan 聲明自動掃描某一個包或類
@Configuration
@ComponentScan(basePackages = "com.test")
public class DemoConfig {}
複製代碼
@Component泛指組件,當組件很差歸類的時候使用,把普通pojo實例化到spring容器中
@Service用於標註業務層組件
@Repository用於標註數據訪問組件,即DAO組件.
@Configuration用於定義配置類,可替換xml配置文件,被註解的類內部包含有一個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器。
@Configuration
class DemoConfig {
@Bean
public Car car() {
return new Car();
}
}
複製代碼
@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");
}
}
}
複製代碼
@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,顧名思義,支持自動配置。這意味着Spring Boot在類路徑上尋找自動配置bean,並自動應用它們。
條件註解:Spring只會在註解參數中的類存在/不存在時使用標記的自動配置bean
@Configuration
@ConditionalOnClass(DataSource.class)
public class DbConfiguration {
//...
}
複製代碼
條件註解:Spring只會在註解參數中的Bean存在/不存在時使用標記的自動配置bean
@Bean
@ConditionalOnBean(name = "dataSource")
public DemoBean entityManagerFactory() {
// ...
}
複製代碼
咱們可讓Spring只在特定資源存在時才使用定義:
@ConditionalOnResource(resources = "classpath:demo.properties")
public Properties demoProperties() {
// ...
}
複製代碼
若是想爲項目中全部 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("FROM Person p WHERE p.name = :name")
Person findByName(@Param("name") String name);
複製代碼
@Id將一個字段標記爲主鍵
@Entity
public class Person {
@Id
private Long id;
}
複製代碼
@Transient標記的字段,數據存儲引擎將不會進行讀寫
@Entity
public class Person {
@Transient
private int age;
}
複製代碼
@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配置鎖模式,有如下模式:
interface DeomRepository extends Repository<Persion, Long> {
@Lock(LockModeType.READ)
Persion findOne(Long id);
}
複製代碼
Spring全家桶中涉及到的註解遠遠不止上述描述這些,篇幅有限,不能一一列舉。僅供學習參考。
喜歡能夠關注公衆號: 終身幼稚園