Spring 注解速查表
配置注解
-
@Configuration:标注一个类作为Spring的配置类。- 为spring boot做一些配置,创建一些service要用的配置bean,其本身也会作为一个特殊的bean被sping托管
- 与@ComponentScan结合可以扫描指定的包,从而自动发现和注册组件。
- 可以和@Import一起使用引入其他的配置类,从而实现配置的模块化和层次化。
-
@ComponentScan:指定Spring在初始化时扫描哪些包。 -
@Bean:用于在@Configuration类中定义一个Bean。- 一般被spring创建的bean都是单例的bean, 通过CGLIB动态代理来创建,这意味着Spring会生成这个类的子类,并且重写所有@Bean方法以确保单例模式(如果是单例作用域)。
- 由于是通过CGLIB代理生成的子类,所以如果在@Configuration类中有一些方法依赖其他@Bean方法,这些依赖会自动被注入,无需显式调用。
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } @Bean public MyRepository myRepository() { return new MyRepositoryImpl(); } @Bean public MyController myController() { return new MyController(myService(), myRepository()); } }- 在这个例子中,myController方法中的myService()和myRepository()调用会返回Spring容器中的Bean实例,而不是每次都创建新的实例。
组件注解
@Component:通用的组件注解。- 用于将一个类标记为Spring管理的组件。Spring容器会通过组件扫描自动检测并注册被@Component注解标注的类为Bean。
- @Component注解通常用于类级别。
@Service:标注服务层的组件。@Repository:标注数据访问层的组件。@Controller:标注控制器层的组件。
依赖注入注解
@Autowired:自动注入依赖。- 按类型注入:默认情况下,Spring根据类型(by type)自动装配Bean。
- 可以用于构造函数、字段、Setter方法:可以标注在构造函数、字段或Setter方法上。
- 可选的required属性:默认required属性为true,表示必须有匹配的Bean。可以将required属性设置为false,使其变为可选注入。
@Qualifier:配合@Autowired使用,用于指定具体的Bean。- @Qualifier 是Spring中的注解,用于在自动装配时指定需要注入的Bean。当有多个候选Bean时,使用@Qualifier注解来指定具体的Bean。
- 用于消除歧义:当有多个同类型的Bean时,通过指定名称来消除歧义。
结合@Autowired使用:通常与@Autowired一起使用。 - @Qualifier(“specificService”)
@Resource:根据名称或类型注入依赖。- @Resource 是Java标准中的注解
- @Resource注解可以根据名称或类型注入Bean。
- 按名称注入:默认情况下,@Resource按名称(by name)注入Bean。
- 可以用于字段和Setter方法:可以标注在字段或Setter方法上。
- 支持名称和类型:如果没有指定名称,Spring会根据字段或方法参数的类型注入Bean。
生命周期注解
@PostConstruct:在依赖注入完成后调用。- @PostConstruct 注解用于在依赖注入完成后执行初始化操作。被@PostConstruct注解的方法会在Bean的构造函数执行完毕之后立即执行。
- 在Bean初始化后执行:方法在依赖注入完成后立即被调用。
只能用于无参方法:被@PostConstruct注解的方法不能有参数。
@PreDestroy:在销毁Bean之前调用。- @PreDestroy 注解用于在Bean销毁之前执行清理操作。被@PreDestroy注解的方法会在Spring容器销毁该Bean之前调用。
- 在Bean销毁前执行:方法在Spring容器销毁Bean之前被调用。
只能用于无参方法:被@PreDestroy注解的方法不能有参数。
AOP注解
@Aspect:标识一个类为切面类。@Before:在目标方法执行之前执行。@After:在目标方法执行之后执行。@Around:在目标方法执行的前后执行。@Pointcut:定义一个切点。- @Pointcut注解可以用于一个方法,该方法不包含任何实现代码,只是定义一个切入点表达式。之后,这个方法可以在其他通知(Advice)中引用,从而实现通知的重用。
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect @Component public class LoggingAspect { // 定义一个切入点表达式 @Pointcut("execution(* com.example.service.*.*(..))") public void serviceLayer() { // 方法体为空,因为这个方法只是一个切入点的标识 } // 使用切入点表达式 @Before("serviceLayer()") public void logBefore() { System.out.println("Before method execution"); } @After("serviceLayer()") public void logAfter() { System.out.println("After method execution"); } }
Spring Boot注解
@SpringBootApplication:组合注解,包括@Configuration、@EnableAutoConfiguration、@ComponentScan。- 示例项目结构
为了更好地理解默认扫描范围和修改扫描范围的区别,以下是一个示例项目结构:
com.example ├── MySpringBootApplication.java ├── controller │ └── MyController.java ├── service │ └── MyService.java └── repository └── MyRepository.java- Spring Boot将扫描com.example包及其所有子包,包括controller、service和repository包中的组件。
- @ComponentScan(basePackages = {“com.example.service”, “com.example.repository”})
- 可以通过basePackages来指定扫描的包,其他的包就不会被扫描
- 如何想要添加扫描的包,则需要显示声明默认的扫描包和额外的扫描包
- 示例项目结构
@EnableAutoConfiguration:启用Spring Boot的自动配置机制。- @EnableAutoConfiguration:根据类路径中的类和配置属性,自动配置Spring应用上下文中的Bean。
简化配置:减少手动配置工作量,使Spring应用更加开箱即用。
自定义:可以通过exclude属性排除某些自动配置类,进行定制化配置。 - 这种自动配置机制极大地简化了Spring应用的开发过程,使得开发人员可以专注于业务逻辑的实现,而不需要过多关注配置细节。
- @EnableAutoConfiguration:根据类路径中的类和配置属性,自动配置Spring应用上下文中的Bean。
@RestController:组合注解,包括@Controller和@ResponseBody。
事务管理注解
@Transactional:声明事务管理。

829

被折叠的 条评论
为什么被折叠?



