上行10m企业光纤做网站西安哪家做网站公司好
2026/3/30 7:27:20 网站建设 项目流程
上行10m企业光纤做网站,西安哪家做网站公司好,湛江制作企业网站,滁州seo公司Spring Boot 常用注解详解一、核心注解分类1. 配置类注解Configuration用途#xff1a;声明一个类为配置类#xff0c;相当于XML配置文件特点#xff1a;会被CGLIB代理#xff0c;确保Bean方法返回单例Configuration public class AppConfig {// 内部可以定义Bean方法 }Bea…Spring Boot 常用注解详解一、核心注解分类1.配置类注解Configuration用途声明一个类为配置类相当于XML配置文件特点会被CGLIB代理确保Bean方法返回单例Configuration public class AppConfig { // 内部可以定义Bean方法 }Bean用途在配置类中声明Bean将方法返回值加入Spring容器属性name/valueBean名称默认方法名initMethod/destroyMethod初始化和销毁方法Configuration public class AppConfig { Bean(name dataSource) public DataSource dataSource() { return new HikariDataSource(); } Bean(initMethod init, destroyMethod cleanup) public MyService myService() { return new MyService(); } }2.依赖注入注解Autowired用途自动注入依赖可省略setter方法注入方式// 1. 字段注入最常用 Service public class UserService { Autowired private UserRepository userRepository; } // 2. 构造器注入Spring 4.3可省略Autowired Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository userRepository; } } // 3. Setter方法注入 Service public class UserService { private UserRepository userRepository; Autowired public void setUserRepository(UserRepository userRepository) { this.userRepository userRepository; } }Qualifier用途配合Autowired指定注入的Bean名称Component Qualifier(mysqlDataSource) public class MysqlDataSource implements DataSource { } Component Qualifier(oracleDataSource) public class OracleDataSource implements DataSource { } Service public class ReportService { Autowired Qualifier(mysqlDataSource) private DataSource dataSource; }ResourceJSR-250标准功能类似Autowired但默认按名称注入Component public class OrderService { Resource(name userService) // 按名称注入 private UserService userService; }InjectJSR-330标准功能同Autowired需额外依赖dependency groupIdjavax.inject/groupId artifactIdjavax.inject/artifactId version1/version /dependency3.属性配置注解Value用途注入配置文件值、SpEL表达式使用方式Component public class AppConfig { // 1. 注入简单值 Value(${app.name}) private String appName; // 2. 默认值 Value(${app.version:1.0.0}) private String version; // 3. 数组/列表 Value(${app.servers:localhost}) private String[] servers; // 4. SpEL表达式 Value(#{systemProperties[java.home]}) private String javaHome; // 5. 系统环境变量 Value(#{environment[JAVA_HOME]}) private String javaEnv; }ConfigurationProperties用途批量绑定配置属性到对象Component ConfigurationProperties(prefix app.datasource) public class DataSourceProperties { private String url; private String username; private String password; private int maxPoolSize 10; // getters/setters } // application.yml app: datasource: url: jdbc:mysql://localhost:3306/test username: root password: 123456 max-pool-size: 204.组件扫描注解ComponentScan用途定义扫描的包路径SpringBootApplication ComponentScan(basePackages {com.example.service, com.example.dao}) public class Application { }组件类型注解注解层级用途Component通用通用组件Service服务层业务逻辑组件Repository持久层数据访问组件Controller控制层MVC控制器RestController控制层REST API控制器使用示例Repository public class UserRepository { } Service public class UserService { Autowired private UserRepository userRepository; } RestController RequestMapping(/users) public class UserController { Autowired private UserService userService; GetMapping public ListUser getUsers() { return userService.findAll(); } }5.条件注解注解条件ConditionalOnBean存在指定Bean时生效ConditionalOnMissingBean不存在指定Bean时生效ConditionalOnClass类路径存在指定类时生效ConditionalOnMissingClass类路径不存在指定类时生效ConditionalOnProperty配置属性匹配时生效ConditionalOnExpressionSpEL表达式为true时生效ConditionalOnJava指定Java版本时生效ConditionalOnWebApplicationWeb应用时生效ConditionalOnNotWebApplication非Web应用时生效Configuration ConditionalOnClass(DataSource.class) ConditionalOnProperty(name spring.datasource.enable, havingValue true) public class DataSourceConfig { Bean ConditionalOnMissingBean public DataSource dataSource() { // 创建数据源 } }6.事务注解Transactional用途声明式事务管理Service public class OrderService { Transactional( propagation Propagation.REQUIRED, // 传播行为 isolation Isolation.DEFAULT, // 隔离级别 timeout 30, // 超时时间(秒) rollbackFor Exception.class, // 回滚异常 noRollbackFor RuntimeException.class // 不回滚异常 ) public void createOrder(Order order) { // 业务逻辑 } }传播行为类型public enum Propagation { REQUIRED, // 支持当前事务不存在则新建 SUPPORTS, // 支持当前事务不存在则以非事务执行 MANDATORY, // 必须存在事务 REQUIRES_NEW, // 新建事务挂起当前事务 NOT_SUPPORTED, // 非事务执行挂起当前事务 NEVER, // 必须非事务执行 NESTED // 嵌套事务 }7.AOP相关注解AspectAspect Component public class LogAspect { // 1. 前置通知 Before(execution(* com.example.service.*.*(..))) public void beforeAdvice(JoinPoint joinPoint) { System.out.println(方法执行前: joinPoint.getSignature().getName()); } // 2. 后置通知 AfterReturning(pointcut execution(* com.example.service.*.*(..)), returning result) public void afterReturningAdvice(JoinPoint joinPoint, Object result) { System.out.println(方法返回: result); } // 3. 环绕通知 Around(execution(* com.example.service.*.*(..))) public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable { // 前置逻辑 Object result joinPoint.proceed(); // 后置逻辑 return result; } }8.测试相关注解SpringBootTest AutoConfigureMockMvc ActiveProfiles(test) // 使用test配置文件 class UserControllerTest { Autowired private MockMvc mockMvc; MockBean private UserService userService; // 模拟Bean Test DisplayName(测试用户查询) void testGetUser() throws Exception { Mockito.when(userService.findById(1L)) .thenReturn(new User(1L, 张三)); mockMvc.perform(get(/users/1)) .andExpect(status().isOk()) .andExpect(jsonPath($.name).value(张三)); } }9.Profile注解Profile用途根据环境激活不同的配置Configuration public class DataSourceConfig { Bean Profile(dev) // 开发环境 public DataSource devDataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .build(); } Bean Profile(prod) // 生产环境 public DataSource prodDataSource() { HikariDataSource ds new HikariDataSource(); ds.setJdbcUrl(jdbc:mysql://prod-server:3306/db); return ds; } }10.定时任务注解Configuration EnableScheduling public class ScheduleConfig { Scheduled(fixedRate 5000) // 每5秒执行 public void task1() { // 定时任务1 } Scheduled(cron 0 0 2 * * ?) // 每天凌晨2点执行 public void task2() { // 定时任务2 } }11.异步处理注解Configuration EnableAsync public class AsyncConfig { Bean public Executor taskExecutor() { ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(10); executor.setQueueCapacity(100); return executor; } } Service public class AsyncService { Async public CompletableFutureString asyncMethod() { // 异步执行 return CompletableFuture.completedFuture(结果); } }二、注解对比表格注解类型主要注解作用域常用属性配置​Configuration类-Bean方法name, initMethod, destroyMethod注入​Autowired字段/方法/构造器requiredQualifier字段/参数valueResource字段/方法name, typeValue字段/参数value组件​Component类valueService类valueRepository类valueController类valueRestController类-条件​ConditionalOnXxx类/方法各种条件事务​Transactional类/方法propagation, isolation, rollbackForAOP​Aspect类valueBefore/After方法valueAround方法valueProfile​Profile类/方法value定时​EnableScheduling类-Scheduled方法cron, fixedRate, fixedDelay异步​EnableAsync类-Async方法value三、最佳实践1.依赖注入选择// 推荐构造器注入不可变依赖 Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository userRepository; } } // 可选Autowired字段注入简洁 Service public class UserService { Autowired private UserRepository userRepository; }2.配置属性管理// 推荐使用ConfigurationProperties替代多个Value ConfigurationProperties(prefix app) Data // Lombok注解 public class AppProperties { private String name; private String version; private ListString servers new ArrayList(); } // 简单配置使用Value Component public class SimpleConfig { Value(${app.name}) private String appName; }3.条件化配置Configuration ConditionalOnClass({DataSource.class, JdbcTemplate.class}) ConditionalOnProperty(name spring.datasource.enable, havingValue true) AutoConfigureAfter(DataSourceAutoConfiguration.class) public class JdbcConfig { // JDBC相关配置 }四、常见问题1.Autowired与Resource区别特性AutowiredResource来源Spring框架JSR-250标准注入方式默认按类型默认按名称必需性requiredtrue必需适用性Spring项目JavaEE/Spring项目2.Component vs BeanComponent类级别注解自动扫描注册Bean方法级别注解在配置类中显式声明3.Value注入失败处理// 设置默认值 Value(${app.port:8080}) private int port; // 使用Optional Value(${app.port:#{null}}) private OptionalInteger port;总结Spring Boot注解大大简化了配置工作但需注意合理选择注入方式优先使用构造器注入理解注解的生命周期和作用范围善用条件注解实现环境适配遵循注解的默认约定减少显式配置

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询