Spring framework Day13:注解结合Java配置类

前言

前面我们管理 bean 都是在 xml 文件中去管理,本次我们将介绍如何在 Java 配置类中去管理 bean。

注解结合 Java 配置类是一种常见的 Spring 注入 Bean 的方式。通常情况下,开发人员会使用 Java Config 来定义应用程序的配置信息,而在 Java Config 中使用注解来声明和注入 Bean。

@Configuration@ComponentScan@Bean 是 Spring Framework 中的常用注解,用于配置和创建 Bean。

  • @Configuration 注解标识一个类为配置类,相当于以前的 XML 配置文件。通常在该类中定义了一些用于创建和组装 Bean 的方法。

  • @ComponentScan 注解用于自动扫描指定包及其子包中的组件(包括注解为 @Component@Service@Repository@Controller 等的类),并注册为 Spring 上下文中的 Bean。

  • @Bean 注解用于声明一个方法,该方法将返回一个对象,该对象将被注册为 Spring 上下文中的 Bean。@Bean 注解可以用在 @Configuration 类中的方法上,也可以用在普通的 @Component 类中的方法上。

 一、开始学习

1、新建项目,结构如下

Spring framework Day13:注解结合Java配置类_第1张图片

2、添加 spring 依赖
 
    
    
        
        
            org.springframework
            spring-context
            5.3.23
        
 
        
            ch.qos.logback
            logback-classic
            1.4.5
        
 
    
 3、在 service 包下新建一个 UserService 接口,在 impl 包下新建一个 UserServiceImpl 实现类

UserService 接口

public interface UserService {

    void add();

}

UserServiceImpl 实现类

@Slf4j
public class UserServiceImpl implements UserService {
    @Override
    public void add() {
        log.info("添加用户");
    }
}
4、在 controller 包下新建一个 UserController 类
@RequiredArgsConstructor
public class UserController {

    /**
     * 通过构造方法注入 UserService
     */
    private final UserService userService;

    public void add() {
        userService.add();
    }

}
5、在 config 包下新建一个 AppConfig 配置类
/**
 * @Date 2023-10-07
 * @Author qiu
 * 

* spring 提倡使用注解和配置类来完成 bean 的装配, * 而配置类就是全面取代 xml 配置文件的一种方式 */ @Configuration @ComponentScan(basePackages = "edu.nf.ch13") public class AppConfig { /** * * @Configuration注解:标识一个类为合法的配置类 * * * * @ComponentScan注解:用于扫描指定的包,装配相关的 bean * * 等价于 xml 中的扫描 * * * * @Respository注解来装配 bean 以外,还可以使用 * * * * @Bean 注解在配置类中装配 Bean,这种方式很类似 * * 在 xml 中配置一个个的 * * 用了 @Bean 注解后默认标注的方法名就是 Bean 的 id *

* 还可以通过 name 属性指定 bean 的别名 * * @return */ @Bean public UserService userService() { return new UserServiceImpl(); } /** * 当需要注入其他 bean 的时候,有两种方式 * 方式一:通过参数实现注入 * 方式二:通过调用 bean 方法来实现注入 * * @Scope:还可以声明在 Bean 方法上来设置 Bean 的作用域 * @return */ @Bean @Scope("prototype") public UserController userController() { return new UserController(userService()); } }

 这是一个使用 Java 配置类来装配 Spring Bean 的示例代码。

在这个示例中,@Configuration 注解表示 AppConfig 类是一个合法的配置类。@ComponentScan 注解用于扫描指定包中的组件,并将其装配为 Spring Bean。

  1. userService() 方法使用 @Bean 注解来声明一个名为 "userService" 的 Spring Bean,并将其返回。可以看到,在这里我们不需要编写 XML 配置文件,仅仅通过 Java 代码就可以完成 Bean 的装配。
  2. userController() 方法也使用 @Bean 注解来声明一个名为 "userController" 的 Spring Bean,并注入 "userService" Bean。在这个方法中,我们可以使用参数来实现依赖注入,也可以通过调用其他 Bean 方法来实现依赖注入。
  3. 此外,我们还使用 @Scope 注解来设置 UserController Bean 的作用域为原型(prototype),以确保每次调用 userController() 方法都会创建一个新的实例。

总体来说,使用 Java 配置类来装配 Spring Bean 比起 XML 配置文件更加直观、方便,也更利于代码维护和易读性。

 注意了!!!这个配置类就已经代替了 xml 文件,所以就不需要再去写 xml 文件了。还有我们之前都是通过使用特定注解(@Seivice、@Controller)去声明一个 Bena,现在也不需要写了,因为在配置文件中使用了 @Bean 去声明,大家自行选择使用。

6、测试
public class Main {

    public static void main(String[] args) {
        // 创建基于注解和配置类的容器工厂
        // 取代 ClassPathXmlApplicationContext
        // 构造方法指定配置类的 Class 对象
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        UserController bean = context.getBean(UserController.class);
        bean.add();
    }

}

 这段代码展示了如何使用基于注解和配置类的 Spring 容器工厂。具体来说,主要包含以下几个步骤:

  1. 创建基于注解和配置类的容器工厂

使用 AnnotationConfigApplicationContext 类来创建一个基于注解和配置类的 Spring 容器工厂。通过将 AppConfig.class 作为参数传入构造方法,指定了配置类的 Class 对象。

  1. 获取 Bean

通过调用容器工厂的 getBean() 方法,传入需要获取的 Bean 的类型 UserController.class,从而获取到名为 "userController" 的 Spring Bean。

  1. 使用 Bean

得到 Bean 之后,即可进行相关操作,这里调用了 add() 方法。

相比于传统的 XML 配置方式,在基于注解和配置类的方式下,上述三个步骤都荟萃在 Main 类中,更加简单明了。同时,由于使用注解,在代码中对 Bean 及其依赖关系进行了直接定义和维护,因此可以更加灵活地进行配置和管理。

运行结果

 

二、使用注解结合Java配置类的好处

使用注解结合Java配置类的好处有以下几点:

  1. 清晰明了:使用注解和Java配置类可以将配置信息直接写在代码中,使得配置与逻辑代码更加紧密,易于理解和维护。不再需要繁琐的XML配置文件,整个配置过程集中在一个类中,便于查找和管理。

  2. 类型安全:注解和Java配置类提供了类型安全的配置方式。通过使用注解,可以在编译时检查类型错误,减少运行时异常。同时,Java配置类使用Java代码进行配置,可以利用IDE的自动补全和编译时检查,提高开发效率。

  3. 灵活性:使用注解和Java配置类可以更方便地进行配置的修改和扩展。在Java配置类中,可以轻松地添加、删除或修改Bean的配置,而不需要修改XML文件并重新部署应用程序。此外,通过使用条件注解、属性注解等高级特性,可以根据不同的条件和环境进行动态的配置。

  4. 更好的测试支持:使用注解和Java配置类可以更方便地进行单元测试和集成测试。在测试时,可以轻松地创建和配置需要的Bean,重写特定的Bean定义,以模拟不同的场景和条件。

  5. 注解丰富:Spring Framework提供了丰富的注解,如@Autowired@Component@Value等,可以用于自动装配依赖、声明Bean、注入属性等。这些注解使得配置和开发更加简洁和便捷。

综上所述,使用注解结合Java配置类能够提高代码的可读性、可维护性和灵活性,减少了配置的复杂性,并支持更好的测试和开发体验。因此,注解和Java配置类已成为Spring框架中推荐的配置方式。

那么对比于 xml 大家更喜欢哪一种方式呢?

三、gitee 案例

案例完整地址:https://gitee.com/qiu-feng1/spring-framework.git

你可能感兴趣的:(spring,framework,java,spring,后端)