您的位置:首页 > 编程语言 > Java开发

[001]一步一步学懂spring - 初识Java配置

2017-07-17 12:28 381 查看
     Spring的配置随着spring的版本的升级大概经历了3个阶段,从最初的xml配置方式到使用注解配置,到现在的使用Java类来进行配置。在Spring 1版本的时候,只有xml配置,所有的bean都需要使用xml来进行配置,导致项目中出现大量的配置文件,到了Spring 2版本的时候随着jdk1.5注解的出现,spring的配置转向注解的方式。于是在这个阶段,到底是使用注解的方式来配置还是使用配置文件的方式来配置,最终形成一个共识,基本配置使用xml,业务配置使用注解。到了spring3的时代,推荐使用Java进行配置。我们可能对使用xml配置和使用注解的方式配置都比较好理解,而对于使用Java类进行配置感到比较不可思议,我们就以Java配置的方式实现依赖注入。
     我们要模拟一个依赖注入,至少要有一个生产者,就是服务的提供方,还要有一个消费者,服务的调用方。另外就是一个配置类和一个测试类。下面是代码

服务提供方
服务提供方非常简单,就是一个完全纯净的JavaBean,连注解也都没有了,是不是感觉很清爽!代码完全没有侵入。这里提供了一个sayHello的服务。
public class TestService {

public String sayHello(String name) {
return "Hello " + name;
}

}

服务调用方
服务的调用方也是一个完全纯净的JavaBean,依然非常清爽。这里调用testServce提供的sayHello服务
public class UseTestService {

private TestService testService;

public String sayHello(String name) {
return testService.sayHello(name);
}

public TestService getTestService() {
return testService;
}

public void setTestService(TestService testService) {
this.testService = testService;
}

}

Java配置
@Configuration
public class JavaConfig {

@Bean
public TestService testService () {
return new TestService();
}

@Bean
public UseTestService useTestService() {
UseTestService service = new UseTestService();
service.setTestService(testService());
return service;
}

// 第二种配置方式,直接将依赖的作为参数传递,spring会自动注入
public UseTestService useTestService(TestService testService) {
UseTestService service = new UseTestService();
service.setTestService(testService);
return service;
}

}

这里是我们的核心配置,在这里我们看到了注解。
@Configuration 表示的是这个类是一个配置类
@Bean 位置是在方法上,表示配置的是一个JavaBean,并将此bean交给spring容器来管理

Configuration 这个注解比较好理解,就是说JavaConfig这个类是一个spring的配置类
Bean这个注解放到了方法上,而方法的返回值就是一个JavaBean对象,也就是说,这里声明了TestService这么一个bean到spring容器中
下面的这个bean,是由spring来管理了服务的消费方,我们知道服务消费方是依赖服务的提供方的,如何解决依赖呢,我们可以看到,首先创建了一个服务的消费方这么一个对象,然后调用set方法将服务的提供方注入,这样就完成了依赖注入。

测试代码
public class Main {

public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(JavaConfig.class);

UseTestService service = ac.getBean(UseTestService.class);
System.out.println(service.sayHello("小明"));

ac.close();
}
}

这里就非常简单了,告诉spring配置类,然后从容器中拿到服务的消费方,调用sayHello方法。这个时候,服务的消费方就会调用服务的提供方的sayHello方法,输入我们期望的结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息