1.2 Java 配置
Java 配置是Spring 4.x 推荐的配置方式,可以完全替代xml 配置: Java 配置也是Spring Boot推荐的配置方式。
Java 配置是通过@Configuration 和@Bean 来实现的。
• @Configuration 声明当前类是一个配置类,相当于一个Spring 配置的xml 文件。
• @Bean 注解在方法上,声明当前方法的返回值为一个Bean。
本书通篇使用Java 配置和注解混合配置。何时使用Java 配置或者注解配置呢?我们主要的原则是:全局配置使用Java 自己置(如数据库相关配置、MVC 相关配置),业务Bean 的配置使用注解配置(@Service 、@Component、@Repository 、@Controlle )。
本节只演示简单的Java 自己置,全书各个章节都会有大量的Java 配置的内容。
1.2.1 示例
(1) 编写功能类的Bean
package com.discry.springboot_in_action.repositories;
public class UserRepository {
public String saveUser(String username) {
return "save user ..." + username;
}
}
代码解释
①此处没有使用@Service 声明Bean
(2)使用功能类的Bean
package com.discry.springboot_in_action.services;
import com.discry.springboot_in_action.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//1
public class UserService {
//2
private UserRepository userRepository;
public UserService() {
}
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void saveUser(String username) {
System.out.println(userRepository.saveUser(username));
}
}
代码解释
①此处没有使用@Service 声明Bean
②此处没有使用@Autowired 注解注入Bean
(3)配置类
package com.discry.springboot_in_action.configs;
import com.discry.springboot_in_action.repositories.UserRepository;
import com.discry.springboot_in_action.services.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Java方式配置Bean
*/
@Configuration
public class JavaConfig {
@Bean
public UserRepository userRepository(){
return new UserRepository();
}
@Bean
public UserService userService(){
return new UserService(new UserRepository());
}
}
(4)运行
package com.discry.springboot_in_action;
import com.discry.springboot_in_action.configs.AOPConfig;
import com.discry.springboot_in_action.configs.AnnotationConfig;
import com.discry.springboot_in_action.configs.JavaConfig;
import com.discry.springboot_in_action.services.DemoAnnotationService;
import com.discry.springboot_in_action.services.DemoMethodService;
import com.discry.springboot_in_action.services.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootInActionApplicationTests {
@Test
public void testJavaConfig(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
UserService userService = context.getBean(UserService.class);
userService.saveUser("小番茄");
context.close();
}
结果如图所示: