装配,或 bean 装配是指在 Spring 容器中把 bean 组装到一起,前提是容器需要知道bean 的依赖关系,如何通过依赖注入来把它们装配到一起。
在 Spring 框架中,在配置文件中设定 bean 的依赖关系是一个很好的机制,Spring 容器能够自动装配相互合作的 bean,这意味着容器不需要和配置,能通过 Bean 工厂自动处理 bean 之间的协作。这意味着 Spring 可以通过向 Bean Factory 中注入的方式自动搞定 bean 之间的依赖关系。自动装配可以设置在每个 bean 上,也可以设定在特定的 bean 上。
在 spring 中,对象无需自己查找或创建与其关联的其他对象,由容器负责把需要相互协作的对象引用赋予各个对象,使用 autowire 来配置自动装载模式。
在 Spring 框架 xml 配置中共有 5 种自动装配:
no:默认的方式是不进行自动装配的,通过手工设置 ref 属性来进行装配 bean。
byName:通过 bean 的名称进行自动装配,如果一个 bean 的property 与另一 bean 的 name 相同,就进行自动装配。
byType:通过参数的数据类型进行自动装配。
constructor:利用构造函数进行装配,并且构造函数的参数通过byType 进行装配。
autodetect:自动探测,如果有构造方法,通过 construct 的方式自动装配,否则使用byType 的方式自动装配。
使用@Autowired 注解来自动装配指定的 bean。在使用@Autowired 注解之前需要在 Spring 配置文件进行配置,<context:annotation-config />。
在启动 spring IOC 时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor 后置处理器,当容器扫描到@Autowied、@Resource 或@Inject 时,就会在 IOC 容器自动查找需要的bean,并装配给该对象的属性。在使用@Autowired 时,首先在容器中查询对应类型的 bean:
如果查询结果刚好为一个,就将该 bean 装配给@Autowired 指定的数据;
如果查询的结果不止一个,那么@Autowired 会根据名称来查找;
如果上述查找的结果为空,那么会抛出异常。解决方法时,使用required=false。
自动装配的局限性是:
重写:你仍需用 和 配置来定义依赖,意味着总要重写自动装配。
基本数据类型:你不能自动装配简单的属性,如基本数据类型,String 字符串,和类。
模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。
可以