Spring boot推荐使用java配置的方式,java配置方式可以完全替代xml配置,而java配置方式两个核心注解就是@configuration和@bean
-
@configuration和@bean
Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:
1)@configuration作用于类上,相当于xml配置文件
2)@bean作用于方法上,相当于xml中的<bean>
2.示例
User类
public class User { private String username; private String password; private Integer age; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } |
UserDao类
public class UserDAO { public List<User> queryUserList(){ List<User> result = new ArrayList<User>(); // 模拟数据库的查询 for (int i = 0; i < 10; i++) { User user = new User(); user.setUsername("username_" + i); user.setPassword("password_" + i); user.setAge(i + 1); result.add(user); } return result; } } |
userService类
@Service public class UserService { @Autowired // 注入Spring容器中的bean对象 private UserDAO userDAO; public List<User> queryUserList() { // 调用userDAO中的方法进行查询 return this.userDAO.queryUserList(); } } |
编写springconfig用户实例化spring容器
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件 @ComponentScan(basePackages = "com.springboot.javaconfig") //配置扫描包 public class SpringConfig { @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean> public UserDAO getUserDAO(){ return new UserDAO(); // 直接new对象做演示 } } |
编写测试方法用于启动spring容器
public class Main { public static void main(String[] args) { // 通过Java配置来实例化Spring容器 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); // 在Spring容器中获取Bean对象 UserService userService = context.getBean(UserService.class); // 调用对象中的方法 List<User> list = userService.queryUserList(); for (User user : list) { System.out.println(user.getUsername() + ", " + user.getPassword() + ", " + user.getPassword()); } // 销毁该容器 context.destroy(); } } |
总结:从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。
ps: 还有一个注解@Component和@bean功能相似,都相当于xml中的<bean>,区别如下:
1) @bean主要配合@configuration使用,作用在方法上
2)@Component作用在类上,springboot启动时扫描此注解进行加载