Spring容器提供了三种装配bean的方式,所谓装配就是指将bean配置在spring容器中,并能够在类与类之间提供依赖关系。
一、隐式Bean发现机制和自动装配
Spring从两个角度来实现自动化装配:组件扫描(Spring自动发现应用中上下文所需要的创建的Bean),自动装配(Spring自动满足Bean之间的依赖)
-
使用Component注解将普通类配置成Bean
@Component用来泛指组件,用于不好区分或者明确归类的Java类,相比之下,使用@Controller,@Service,@Respository等注解声明为bean可以明确的表示组件的归类
@Component public class Waiter { public void service(String name){ System.out.println("service to " + name); } }
-
使用@Autowired(自动注入)使Spring满足Bean的依赖
@Autowired是由Spring提供的注解,同样的,你还可以通过使用Java本身提供的注解@Resource实现依赖注入
@Component public class User { @Autowired private Article article; public void action() { article.action(); } }
-
使用@Component注解扫描组件
默认是扫描当前包以及子包。如果想设置其它包或者多个包,可以通过设置该注解的basePackages。
@Configuration @ComponentScan("包名路径") public class ApplicationConfig { }
二、基于Java的Bean装配
我们可以使用@Configuration注解将类声明为一个配置类,再使用@Bean注解将方法返回的实例对象添加到容器的上下文中
@Bean注解的bean的ID默认是方法名,如果要指定名称,可以通过name属性来设置
@Configuration
@ComponentScan("com.jimisun")
public class WebConfig {
@Bean
public User user() {
return new User(myArticle());
}
@Bean
public MyArticle myArticle() {
return new MyArticle();
}
}
三、基于XML的Bean装配
不使用注解时,可以在spring的xml文件中配置bean
<?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>
- 上述配置方案都不是互斥的,你甚至可以将JavaConfig、自动装配、xml配置混合在一起。