创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质。
Spring配置的可选方案
- 在XML中进行显示的配置
- 在Java中进行显示配置
- 隐式的Bean发现机制和自动装备
建议尽可能的使用自动装配机制。显式配置越少越好,当你必须要显示配置bean的时候,我推荐使用类型安全并且比XML更加强大的JavaConfig
1.自动化装配Bean
Spring从两个角度实现自动化装配
组件扫描:Spring会自动发现应用上下文中所创建的bean。
自动装配:Spring自动满足bean之间的依赖。
组件扫描和自动装配组合在一起就能发挥出强大的威力,他们能够将你显示的配置降低到最少。
组件扫描默认是不启用的,我们需要显示的配置一下,从而命令它去寻找带有@Component注解的类,并为其创建bean。
ComponentScan注解启用了组件扫描
@ComponentSan默认会扫描与配置类相同的包
如果倾向于使用XML来启动组件扫描的话,那么可以使用Spring Context的命名空间的
<context:component-scan>元素
Junit单元测试
设置组件扫描的基础包
或者这样
或者这样
或者这样
通过为bean添加注解实现自动装配
1.在构造器上添加@Autowired注解
[email protected]注解还能用在属性的Setter方法上
如果没有匹配的话,回报异常,所以需要以下配置处理
2.通过Java代码装配Bean
尽管在很多场景下组件扫描和自动装配实现Spring的自动化配置是更为推荐的方式,但是有时候自动化配置的方案行不通,因此需要明确配置Spring,比如说,你想要将第三方库中的组件配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired,这种情况只能使用显示的装配方式。
显示的装配方式有两种可选方案:
Java和XML
2.1 JavaConfig显示配置
1. 创建配置类
2.声明简单的bean
借助JavaConfig实现注入
3.导入混合配置
小结:
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();
}
}
运行结果
ok