本篇文章我们通过例子看一下如何使用java配置的方式实现注入。Java配置的方式是Spring4之后的推荐,也是spring boot的配置方式。Java配置是通过注解Configration+Bean实现的。
创建spring的project和设定
Java->Groovy->Create project from template/Commad Line App->springdemo/com.liumiao.demo.spring
Alt + Ctrl + Shift + S(IntelliJ IDEA) -> 将spring的lib全部加入到Dependency中
SwimmingService: 提供服务的类(注入对象)
这是跟普通的注解不同之处,需要注入的类就是非常单纯的类而已,没有spring的任何注解等特殊之处
package com.liumiao.demo.spring;
public class SwimmingService {
public SwimmingService(){
System.out.println("Default SwimmingService Constructor is called.");
}
public String providSwimmingCoachingService(){
return "Swimming coaching Service provided.";
}
}
Person Interface
package com.liumiao.demo.spring;
public interface Person {
public String sayhello();
}
Teacher类
此处也没有注解,但是有了setter方式的实现。
package com.liumiao.demo.spring;
public class Teacher implements Person{
private SwimmingService swimmingService;
@Override
public String sayhello(){
return "Hello, I am a teacher";
}
public void setSwimmingService(SwimmingService swimmingService) {
this.swimmingService = swimmingService;
}
public String provideSwimmingCoaching(){
return swimmingService.providSwimmingCoachingService();
}
}
配置类
使用Bean注解声明所有的bean
package com.liumiao.demo.spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig {
@Bean
public SwimmingService swimmingService(){
return new SwimmingService();
}
@Bean
public Teacher teacher(){
Teacher teacher = new Teacher();
teacher.setSwimmingService(swimmingService());
return teacher;
}
}
TestDemo:使用spring
package com.liumiao.demo.spring;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestDemo {
public static void main(String[] args){
AnnotationConfigApplicationContext context =new AnnotationConfigApplicationContext(MyConfig.class);
Teacher person = context.getBean(Teacher.class);
System.out.println(person.provideSwimmingCoaching());
context.close();
}
}
执行结果
Nov 27, 2016 2:13:33 PM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
情報: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3d646c37: startup date [Thu Nov 27 14:13:33 CST 2016]; root of context hierarchy
Default SwimmingService Constructor is called.
Nov 27, 2016 2:13:34 PM org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
Swimming coaching Service provided.
情報: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@3d646c37: startup date [Thu Nov 27 14:13:33 CST 2016]; root of context hierarchy