- IOC(Inversion of Control):控制反转.
- DI(Dependency Injection:依赖注入.
正向控制:我们控制依赖,然后交由容器,容器被动接受.
反向控制:容器来控制类与类的依赖关系,我们只负责将类交由容器,不用负责组装类(调整类与类之间的依赖).
控制反转: (是一种概念不是动作)
在传统项目开发中,我们有容器化管理这个机制,把类交由容器来管理,但是类与类之间会产生依赖关系,我们传统的处理方案是,例如servlet,我们应用程序自己处理完依赖关系之后交由容器,容器只负责调用和执行,但是并不负责管理关系,增加了开发难度,控制反转是将类与类的关系交由容器,应用程序只负责将需要管理关系的类交给容器,管理权限发生转换. 总之~
类与类之间的依赖关系的处理交由容器来负责,应用程序只负责将需要处理的类交由容器即可.
依赖注入:(是动作) 依赖于容器将原有的依赖关系注入到目标中
将原本类和类之间的关系,依赖于容器进行添加,来完成最终的组转过程.
1.自动装配一个类里面 创建另一个类当属性的话 在属性上面写@Autowire或者@Resourc自动装配,使用自动装配的前提自动装配的对象的属性在IOC容器中存在
1. context:annotation-config和context:component-scan的区别< context:annotation-config> 是用于激活那些已经在spring容器里注册过的bean上面的注解,也就是显示的向Spring注册:(以下四个注解)
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor
- 比如我们要使用@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。传统声明方式如下:
- 如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor。传统声明方式如下
- 如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。
- 如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。
一般来说,像@ Resource 、@ PostConstruct、@Antowired这些注解在自动注入还是比较常用,所以如果总是需要按照传统的方式一条一条配置显得有些繁琐和没有必要,于是spring给我们提供< context:annotation-config/>的简化配置方式,自动帮你完成声明。
总之
(1)< context:annotation-config />:仅能够在已经在已经注册过的bean上面起作用。对于没有在spring容器中注册的bean,它并不能执行任何操作。 并且@Component、@Controller、@Service对这些注解无效 所以就出来了以前那个
(2)< context:component-scan base-package="XX.XX"/> :除了具有上面的功能之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。
2.< mvc:annotation-driven/>< mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。



