Spring Boot 2 中 default-autowire 的使用
在 Spring Boot 2 中,default-autowire
这个来自传统 XML 配置的概念仍然存在,但它的使用已经大大减少,因为现代 Spring Boot 应用主要使用注解驱动的配置方式。
default-autowire 在 Spring Boot 2 中的状态
- 仍然有效:如果你在 Spring Boot 2 中使用 XML 配置,
default-autowire
仍然有效 - 不推荐使用:Spring Boot 强烈推荐使用 Java 配置和注解代替 XML 配置
- 默认行为:Spring Boot 的自动装配默认是基于注解的按类型(byType)装配
如何在 Spring Boot 2 中使用 default-autowire
1. 在 XML 配置中使用(传统方式)
如果你必须使用 XML 配置:
<!-- src/main/resources/applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"default-autowire="byName"><bean id="userService" class="com.example.UserService"/><bean id="userRepository" class="com.example.UserRepositoryImpl"/>
</beans>
然后在 Spring Boot 应用中导入这个 XML 文件:
@SpringBootApplication
@ImportResource("classpath:applicationContext.xml")
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}
2. 现代替代方案(推荐)
Spring Boot 推荐使用以下方式替代 default-autowire
:
使用 @Autowired
(按类型)
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;
}
使用 @Resource
(按名称)
@Service
public class UserService {@Resource(name = "userRepositoryImpl")private UserRepository userRepository;
}
使用 @Qualifier
(明确指定)
@Service
public class UserService {@Autowired@Qualifier("jdbcUserRepository")private UserRepository userRepository;
}
重要区别
特性 | XML default-autowire | Spring Boot 注解方式 |
---|---|---|
配置方式 | 集中式(XML) | 分散式(注解) |
默认行为 | 需显式设置(default=“no”) | @Autowired 默认为 byType |
可读性 | 较低 | 较高 |
灵活性 | 较低 | 较高 |
现代应用适用性 | 不推荐 | 推荐 |
最佳实践建议
- 避免使用 XML 配置:在新项目中完全使用 Java 配置和注解
- 优先使用构造器注入:这是 Spring 团队推荐的方式
- 需要按名称装配时:使用
@Qualifier
或@Resource
- 保持一致性:在整个项目中采用统一的依赖注入风格
// 推荐方式 - 构造器注入
@Service
@RequiredArgsConstructor
public class OrderService {private final PaymentService paymentService;private final InventoryService inventoryService;
}
总结:虽然在 Spring Boot 2 中技术上仍然可以使用 default-autowire
,但在现代 Spring Boot 应用中应该使用基于注解的依赖注入方式,它们提供了更好的类型安全性和代码可读性。