1.x
纯xml配置。java5发布后,在1.2.0版本的时候增加了@Transcational注解。
2.x
增加了新的注解:@Required @Repository @Aspect。
扩展了配置文件功能:可以使用自定义标签。
2.5版本有较大升级,新增以下注解:@Autowired @Qualifier@Component@Service @Controller @RequestMapping等
可以使用xml+context:component-sacn+@Component+@Controller+@Service+@Repository。
3.x
增加注解:@Configuration 配置文件类注解等价于applicationContext.xml文件;@Bean 等价于。3.0版本的时候context:component-scan还没有对应的注解,所以还是需要通过xml配置,有个过渡的注解@ImportResource(“applicationContext.xml”)可以在配置类里获取xml配置文件里的类容。
3·1版本增加:@ComponentScan 默认扫描当前包及其子包下所有的被@Component @Controller @Service @Repository注解所标识的类并加载到容器中。
@Enable*可以实现对第三方模块的整合 可以不依赖配置文件,在java配置类中实现。
@Import
使用方式一(静态引入):@Import(User.class)将需要引入到IOC容器中的类显式的添加进去。
使用方式二(动态引入):@Import(ImportSelector.class)传入的类实现ImportSelector接口,并重写selectImports方法,此方法可以根据自己的业务逻辑返回IOC容器需要加载的类型的全类路径名称。
使用方式三(动态引入):@Import(ImportBeanDefinitionRegistar.class)传入的类实现ImportBeanDefinitionRegistrar接口,并重写registerBendefinitions方法,此方法参数里有BeanDefinitionRegistry注册器。先将需要添加的类型封装为RootBeanDefinition类型,然后注册到注册器中。可以自主的添加想要的对象注册到容器中。
在实例化类的时候会通过反射去判断传入的类是否实现了第二、三两个接口,如果没有就直接实例化该类, 如果有就去相应的方法中找类型。
4.x
注解完善的时代
@Conditional(Conditon.class)传入的类实现Condition接口并重写matches方法,此方法可以根据实际业务返回boolean类型。以此来决定IOC容器是否加载使用了此注解的类的对象。