天天看点

【Spring实战】2.装配Bean

创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质。

Spring配置的可选方案

  1. 在XML中进行显示的配置
  2. 在Java中进行显示配置
  3. 隐式的Bean发现机制和自动装备

建议尽可能的使用自动装配机制。显式配置越少越好,当你必须要显示配置bean的时候,我推荐使用类型安全并且比XML更加强大的JavaConfig

1.自动化装配Bean

Spring从两个角度实现自动化装配

组件扫描:Spring会自动发现应用上下文中所创建的bean。

自动装配:Spring自动满足bean之间的依赖。

组件扫描和自动装配组合在一起就能发挥出强大的威力,他们能够将你显示的配置降低到最少。

组件扫描默认是不启用的,我们需要显示的配置一下,从而命令它去寻找带有@Component注解的类,并为其创建bean。

ComponentScan注解启用了组件扫描

【Spring实战】2.装配Bean

@ComponentSan默认会扫描与配置类相同的包

如果倾向于使用XML来启动组件扫描的话,那么可以使用Spring Context的命名空间的

<context:component-scan>元素

【Spring实战】2.装配Bean

Junit单元测试

【Spring实战】2.装配Bean

设置组件扫描的基础包

【Spring实战】2.装配Bean

或者这样

【Spring实战】2.装配Bean

或者这样

【Spring实战】2.装配Bean

或者这样

【Spring实战】2.装配Bean

通过为bean添加注解实现自动装配

1.在构造器上添加@Autowired注解

【Spring实战】2.装配Bean

[email protected]注解还能用在属性的Setter方法上

【Spring实战】2.装配Bean

如果没有匹配的话,回报异常,所以需要以下配置处理

【Spring实战】2.装配Bean

2.通过Java代码装配Bean

尽管在很多场景下组件扫描和自动装配实现Spring的自动化配置是更为推荐的方式,但是有时候自动化配置的方案行不通,因此需要明确配置Spring,比如说,你想要将第三方库中的组件配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired,这种情况只能使用显示的装配方式。

显示的装配方式有两种可选方案:

Java和XML

2.1 JavaConfig显示配置

1. 创建配置类

【Spring实战】2.装配Bean

2.声明简单的bean

【Spring实战】2.装配Bean

借助JavaConfig实现注入

【Spring实战】2.装配Bean

3.导入混合配置

【Spring实战】2.装配Bean

小结:

Spring框架的核心是Spring容器,容器负责管理应用中组件的声明周期,他会创建这些组件并保证他们的依赖能够得到满足,这样的话,组件才能完成预定的任务。

Spring中装备Bean的三种主要方式:自动化配置、基于Java的显示配置以及基于XML的显示配置。

建议极可能的使用自动化配置,以避免显示配置带来的维护成本,如果确实要是使用显示配置Spring的话,应该优于选择基于Java的配置,他比基于XML的配置更加强大、类型安全且易于重构。

@Autowired可是用在构造方法上,用在set方法上除此之外还可以用在任意方法上,下面用代码验证。      
UserDao      
@Component
public class UserDao {
	public void SayHelloUser(){
		System.out.println("Hello User!");
	}
}
           

UserService

@Service
public class UserService {

	private UserDao userDao;

	@Autowired
	public void desionUserDao(UserDao userDao){
		this.userDao = userDao;
	}
	public void SayHelloUser(){
		userDao.SayHelloUser();
	}
}
           
App      
@ComponentScan("com.lhj")
public class App {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(App.class);
		UserService object = (UserService) context.getBean("userService");
		object.SayHelloUser();
	}
}
           

运行结果

【Spring实战】2.装配Bean

ok