三种方案:
自动化装配(推荐)
组件扫描:创建bean
- @component通知Spring为其创建bean
- @componentScan启用组件扫描,也可以使用XML启动组件扫描
- 默认扫描范围为package,或指明包@componentScan("packagename"),也可以使用反射指定类或接口@componentScan(basePackageClasses = { .class})
自动装配:解决依赖
- @Autowired:默认传入构造器实例化的Bean
显式配置-XML
- 构造器注入:c-命名空间(constructor),通常用于强依赖
- 属性注入:p-命名空间(property)
- : ref = "String name"引用装配过的名为name的Bean
- : = "String name" 装配名为name的属性
显式配置-Java(优于XML)
- @Bean
- 若向Bean2传入其他已经@Bean注解的getBean1(),该注解会被Spring拦截,返回单例,不会构造新的Bean1
- 若传入Bean bean1,则会每次自动创建bean1
- 相对XML的优势1:可以在java语言允许范围类灵活配置Bean,如条件、分支等
- 相对XML的优势2:可以享受到编译时检查、XML不可以