一、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全家桶中涉及到的注解远远不止上述描述这些,篇幅有限,不能一一列举。仅供学习参考。
喜欢可以关注公众号: 终身幼稚园
网友评论