Spring Ioc容器主要有两种类型:bean工厂和应用上下文,
工厂由BeanFactory接口定义是最简单的容器。应用上下文(ApplicationContext)是基于BeanFactory,并提供应用框架级别的服务。
BeanFactory中保存的是BeanDefinition即所谓的Bean,
BeanDefinition 中保存了我们的 Bean 信息,比如这个 Bean 指向的是哪个类、是否是单例的、是否懒加载、这个 Bean 依赖了哪些 Bean 等等。
Spring 容器负责创建应用程序中的Bean并通过DI来协调这些对象之间的关系。Spring主要提供三种装配机制:在xml中进行显示配置,java显示配置,隐式bean发现机制和自动装配,图中的彩色数字代表了,推荐使用的顺序。
自动忽略了XML装配的内容。
Spring 装配高级功能:
对于Spring表达式并不详尽
条件化Bean配置示例:
//这是需要满足的条件
public class MagicExesitCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return conditionContext.getEnvironment().containsProperty("magic");
}
}
@Configuration
public class KnightConfig {
//如果MagicExesitCondition的matches方法返回true,那么MagicBean会被装配到应用上下文中
@Bean
@Conditional(MagicExesitCondition.class)
public MagicBean magicBean(){
return new MagicBean();
}
}