h网站模板,适用于个人网站的域名,网站内容排版设计模板,长沙h5手机网站制作今天#xff0c;这篇文章带你将深入理解Spring Boot中30常用注解#xff0c;通过代码示例和关系图#xff0c;帮助你彻底掌握Spring核心注解的使用场景和内在联系。
一、启动类与核心注解
1.1 SpringBootApplication
组合注解#xff1a; SpringBootApplication Confi… 今天这篇文章带你将深入理解Spring Boot中30常用注解通过代码示例和关系图帮助你彻底掌握Spring核心注解的使用场景和内在联系。
一、启动类与核心注解
1.1 SpringBootApplication
组合注解 SpringBootApplication Configuration EnableAutoConfiguration ComponentScan SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
三个核心功能 Configuration声明配置类 EnableAutoConfiguration启用自动配置 ComponentScan组件扫描默认扫描启动类所在包及其子包 二、配置与Bean管理
2.1 Configuration
声明配置类内部包含多个Bean方法
Configuration
public class AppConfig {Beanpublic DataSource dataSource() {return new HikariDataSource();}
}
2.2 Bean vs Component
特性BeanComponent声明位置配置类方法类级别控制粒度第三方库类自己编写的类依赖注入方法参数自动注入字段/构造器
2.3 Scope Bean作用域
Bean
Scope(prototype)
public Service prototypeService() {return new Service();
}
三、依赖注入DI
3.1 Autowired
自动注入的三种方式
// 构造器注入推荐
Autowired
public MyController(MyService service) {this.service service;
}// Setter注入
Autowired
public void setService(MyService service) {this.service service;
}// 字段注入不推荐
Autowired
private MyService service;
3.2 Qualifier
解决多个同类型Bean的冲突
Autowired
Qualifier(mainService)
private Service service;
3.3 Primary
设置首选Bean
Bean
Primary
public Service primaryService() {return new PrimaryService();
}
四、组件扫描与分层架构
4.1 分层注解 Service
public class UserService {// 业务逻辑
}RestController
RequestMapping(/api/users)
public class UserController {Autowiredprivate UserService userService;
} 五、Web开发注解
5.1 请求映射
GetMapping(/{id})
public User getUser(PathVariable Long id) {return userService.findById(id);
}PostMapping
ResponseStatus(HttpStatus.CREATED)
public User createUser(RequestBody User user) {return userService.save(user);
}
5.2 参数绑定
GetMapping
public ListUser searchUsers(RequestParam(defaultValue 1) int page,RequestParam(required false) String name) {// 分页查询逻辑
}
六、条件装配注解
6.1 ConditionalOnProperty
Bean
ConditionalOnProperty(prefix feature,name new-payment,havingValue true)
public PaymentService newPaymentService() {return new NewPaymentService();
}
6.2 其他条件注解 ConditionalOnClass类路径存在指定类时生效 ConditionalOnMissingBean容器中不存在指定Bean时生效 七、AOP编程
7.1 切面配置
Aspect
Component
public class LoggingAspect {Pointcut(execution(* com.example.service.*.*(..)))private void serviceLayer() {}Around(serviceLayer())public Object logMethod(ProceedingJoinPoint joinPoint) throws Throwable {// 记录方法执行时间long start System.currentTimeMillis();Object result joinPoint.proceed();long duration System.currentTimeMillis() - start;System.out.println(joinPoint.getSignature() executed in duration ms);return result;}
} 八、配置属性绑定
8.1 ConfigurationProperties
Configuration
ConfigurationProperties(prefix app)
public class AppConfig {private String name;private int version;private ListString servers new ArrayList();// getters/setters
}
application.yml配置
app:name: MyApplicationversion: 2servers:- server1- server2 九、Bean 的生命周期 Spring Boot 中的 Bean 生命周期是理解 Spring 容器管理 Bean 的关键。Bean 的生命周期大致可以分为以下几个阶段 实例化InstantiationSpring 容器通过调用无参构造方法创建 Bean 实例。 属性赋值PopulationSpring 容器通过反射将配置文件或注解中定义的属性值注入到 Bean 中。 初始化前处理Pre-initialization BeanNameAware如果 Bean 实现了 BeanNameAware 接口Spring 会调用其 setBeanName 方法将 Bean 的名称传递给 Bean。 BeanFactoryAware如果 Bean 实现了 BeanFactoryAware 接口Spring 会调用其 setBeanFactory 方法将 BeanFactory 传递给 Bean。 BeanPostProcessorSpring 会调用 BeanPostProcessor 的 postProcessBeforeInitialization 方法对 Bean 进行前置处理。 初始化Initialization InitializingBean如果 Bean 实现了 InitializingBean 接口Spring 会调用其 afterPropertiesSet 方法进行初始化。 PostConstruct如果 Bean 中有方法使用了 PostConstruct 注解Spring 会调用该方法进行初始化。 使用UsageBean 已经初始化完成可以被应用程序使用。 销毁前处理Pre-destruction DisposableBean如果 Bean 实现了 DisposableBean 接口Spring 会调用其 destroy 方法进行销毁前的清理工作。 PreDestroy如果 Bean 中有方法使用了 PreDestroy 注解Spring 会调用该方法进行销毁前的清理工作。 销毁DestructionSpring 容器关闭时销毁 Bean。 Component
public class MyBean implements BeanNameAware, BeanFactoryAware, InitializingBean, DisposableBean {private String name;public MyBean() {System.out.println(1. 实例化 Bean);}Overridepublic void setBeanName(String name) {System.out.println(2. 设置 Bean 名称);}Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {System.out.println(3. 设置 BeanFactory);}Overridepublic void afterPropertiesSet() throws Exception {System.out.println(4. 初始化 Bean);}Overridepublic void destroy() throws Exception {System.out.println(6. 销毁 Bean);}PostConstructpublic void init() {System.out.println(5. PostConstruct 注解的初始化方法);}PreDestroypublic void preDestroy() {System.out.println(7. PreDestroy 注解的销毁前方法);}
} 十、注解关系图谱 总结 Spring Boot 中的注解和 Bean 生命周期是开发中非常重要的概念。通过合理使用各种注解可以大大简化开发过程提高开发效率。同时理解 Bean 的生命周期有助于更好地管理 Bean 的创建、初始化和销毁过程确保应用程序的稳定性和可靠性。