1、XML +<bean/>
2、XMl+注解(@Component、@Controller、@Service、@Repository);
1、xml配置文件(context:component-scan 指定spring扫描并注册组件的位置)
2、使用@Component及其衍生注解@Controller 、@Service、@Repository直接定义bean;
3、使用@Bean定义第三方Bean,并将所在类定义为配置类或Bean。
3、注解方式声明配置类+注解;
@ComponentScan生命配置类扫描位置+注解
区别:
xml定义Bean解析的入口为org.springframework.beans.factory.xml.XmlBeanDefinitionReader,内部实际使用org.springframework.beans.factory.xml.BeanDefinitionParserDelegate解析Spring标签;
<context:component-scan />是org.springframework.context.annotation.ComponentScanBeanDefinitionParser,,真正干活的是ClassPathBeanDefinitionScanner。
@componnentScan是org.springframework.context.annotation.ComponentScanAnnotationParser解析,真正干活的是ClassPathBeanDefinitionScanner。
4、实现FactoryBean接口
5、@importResource注解导入之前使用xml定义的Bean,一般用作系统迁移等;
6、@import引入第三方bean,是一种低侵入式的形式,不用修改原来任何的代码
7、AnnotationConfigApplicationContext调用register方法
8、@Import 导入ImportSelector接口
9、@Import导入ImportBeanDefinitionRegistrar接口;
10、@Import导入BeanDefinitionRegistryPostProcessor接口。