欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程希望您能站在上帝的角度去观察(了解)Java体系。使Java的各种后端技术在你心中模块化;让你在工作中能将Java各个技术了然于心;能够即插即用。本章我们来一起了解Spring专栏—SpringBean装配。
本章我们一起来探讨SpringBean的装配,所谓 ”装配“ 就是值将Bean安装Bean容器中并进行依赖关系配置,稍微提一下IOC控制反转就是指的安装这一过程中,而DI依赖指的是配置这一过程。本章我们就Spring应用中如何进行装配Bean进行讲解;如自动化装配,Java配置装配,XML配置装配方式进行介绍,但本章并不会介绍Spring项目全局配置方案,我们会在下一章中单独介绍Spring基于Java的全局配置和基于XML的全局配置的两种方案。本章提供三个完整源码测试,Github源码下载地址
Spring的三种装配机制
- 隐式的Bean发现机制和自动装配
- 在Java中进行装配
- 在XML中进行装配
值得一提的是,我们在项目中应该优先实用隐式的Bean发现机制和自动装配,其次使用在Java中进行装配,最后再使用在XML中进行装配。
隐式的Bean发现机制和自动装配隐式Bean发现和自动装配测试源码
Spring从两个角度来实现自动化装配;组件扫描(Spring自动发现应用中上下文所需要的创建的Bean),自动装配(Spring自动满足Bean之间的依赖)
- 使用@Component将普通Java类配置成SpringBean
- 使用@Autowired(自动装配)使Spring满足Bean的依赖
- 配置组件扫描包(组件扫描)
- 在Java类中配置组件扫描
@ComponentScan("com.jimisun.controller")
-
- 在XML配置文件配置组件扫描
<context:component-scan base-package="com.jimisun.controller,com.jimisun.service"/>
@Component public class User { @Autowired private Article article; public void action() { article.action(); } }
注意:示例中使@Component将Java类声明成SpringBean,除了这一注解你还可以使用@Controller,@Service,@Repository等注解... 同样@Autowired也可使用其他注解来代替,这里为了简明介绍不再陈述。
- 使用 @Bean 注解将方法返回的实例对象添加到上下文中
- 在@Bean返回的实例对象中可以通过构造器注入传入相关依赖
@Configuration @ComponentScan("com.jimisun") public class WebConfig { @Bean public User user() { return new User(myArticle()); } @Bean public MyArticle myArticle() { return new MyArticle(); } }
注意:如果你没有接触过基于java配置Bean的装配的话,不需要着急,这里只需要你理解SpringBean装配的全局信息,下章我们会更为详细的介绍。
基于XML的Bean装配基于XML装配Bean完整源码
对于在XML中进行配置可能使我们经常使用的,在以前的Spring版本中几乎我们都是使用XML进行配置Spring,下面我们简单来看一下。<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <bean class="com.jimisun.spring.example.User" id="user"> <constructor-arg ref="myArticle"/> </bean> <bean class="com.jimisun.spring.example.MyArticle" id="myArticle"></bean> </beans>
注意:在实际应用中如何不想被海量的<bean>标签埋没前,你应当优先使用隐式的Bean发现机制和自动装配和在Java中进行装配,最后再选择使用在XML中配置。
最后值得一提的是在实际项目中我们通常都会选择组合使用
- 隐式的Bean发现机制和Java中进行装配进行组合
- 隐式的Bean发现机制和XML配置进行组合
这样便于我们更方便的配置Spring项目,下一章我们会针对全局的Spring项目的配置进行介绍。