@Configuration和@Bean的用法和理解

SpringBoot组件管理和配置
本文介绍如何使用SpringBoot管理自定义类及第三方框架的核心组件,包括通过@Controller、@Service等注解实现类的生命周期管理,以及如何利用@Configuration和@Bean进行数据库连接池和事务管理器的配置。

Spring Boot提倡约定优于配置,如何将类的生命周期交给spring


1、第一种自己写的类,Controller,Service。 用@controller @service即可

2、第二种,集成其它框架,比如集成shiro权限框架,集成mybatis分页插件PageHelper,第三方框架的核心类都要交于Spring大管家管理

@Configuration可理解为用spring的时候xml里面的<beans>标签

@Bean可理解为用spring的时候xml里面的<bean>标签

Spring Boot不是spring的加强版,所以@Configuration和@Bean同样可以用在普通的spring项目中,而不是Spring Boot特有的,只是在spring用的时候,注意加上扫包配置

<context:component-scan base-package="com.xxx.xxx" />,普通的spring项目好多注解都需要扫包,才有用,有时候自己注解用的挺6,但不起效果,就要注意这点。

Spring Boot则不需要,主要你保证你的启动Spring Boot main入口,在这些类的上层包就行


就像这样,DemoApplication是启动类,关于启动类的位置放置,在另一篇博客有专门的去分析。

@Configuration和@Bean的Demo类

@Configuration  
public class ExampleConfiguration {  
  
    @Value("com.mysql.jdbc.Driver")  
    private String driverClassName;  
  
    @Value("jdbc://xxxx.xx.xxx/xx")  
    private String driverUrl;  
  
    @Value("${root}")  
    private String driverUsername;  
  
    @Value("123456")  
    private String driverPassword;  
  
    @Bean(name = "dataSource")  
    public DataSource dataSource() {  
        BasicDataSource dataSource = new BasicDataSource();  
        dataSource.setDriverClassName(driverClassName);  
        dataSource.setUrl(driverUrl);  
        dataSource.setUsername(driverUsername);  
        dataSource.setPassword(driverPassword);  
        return dataSource;  
    }  
  
    @Bean  
    public PlatformTransactionManager transactionManager() {  
        return new DataSourceTransactionManager(dataSource());  
    }  
  
}


这样,在项目中

@Autowired

private DataSource dataSource;

的时候,这个dataSource就是我们在ExampleConfiguration中配的DataSource


### @Configuration @Bean 注解与 XML 配置方式的区别联系 #### 区别 1. **配置形式**: - XML 配置通过 `<bean>` 标签定义 bean,例如: ```xml <bean id="myService" class="com.example.MyService"/> ``` 这种方式需要开发者手动编写 XML 文件并维护其结构[^4]。 - 使用 @Configuration @Bean 注解的方式则通过 Java 代码定义 bean。例如: ```java @Configuration public class AppConfig { @Bean public MyService myService() { return new MyService(); } } ``` 这种方式将配置逻辑嵌入到 Java 类中,避免了外部 XML 文件的使用[^2]。 2. **类型安全性**: - XML 配置依赖字符串来定义 bean 的名称类路径,容易出现拼写错误或类路径错误,且无法在编译时检测[^4]。 - @Bean 注解通过 Java 方法返回值类型定义 bean 类型,提供了更好的类型安全性编译时检查[^3]。 3. **可读性与维护性**: - XML 配置文件随着项目规模增大可能变得复杂且难以维护,尤其是在需要跨多个文件管理 bean 时[^4]。 - @Configuration @Bean 注解的方式将配置逻辑集中在一个或多个 Java 类中,便于阅读维护[^2]。 4. **动态配置能力**: - XML 配置文件中的 bean 定义通常是静态的,无法直接在运行时根据条件动态生成 bean。 - 使用 @Bean 注解的方法可以包含逻辑代码,支持根据条件动态创建 bean 实例。例如: ```java @Bean public MyService myService() { if (someCondition) { return new MyServiceImplA(); } else { return new MyServiceImplB(); } } ``` 5. **注解驱动的灵活性**: - XML 配置需要显式声明所有 bean,而基于注解的方式可以通过扫描特定包自动发现并注册 bean。例如,使用 `@ComponentScan` 可以简化 bean 的注册过程[^4]。 - @Configuration @Bean 注解结合使用时,仍然可以实现类似 XML 配置的功能,但更加灵活现代化[^2]。 #### 联系 1. **目的相同**: - 不论是 XML 配置还是 @Configuration @Bean 注解,其核心目标都是定义管理 Spring 容器中的 bean 实例[^1]。 2. **功能等价**: - 大部分通过 XML 配置可以实现的功能,也可以通过 @Configuration @Bean 注解实现,反之亦然。 3. **兼容性**: - Spring 框架同时支持 XML 配置基于注解的配置方式,开发者可以根据项目需求选择适合的方式,甚至可以混合使用两种方式[^4]。 #### 使用场景 1. **XML 配置适用场景**: - 当项目需要与旧版系统集成,且旧版系统大量使用 XML 配置时,继续使用 XML 配置可能更为方便[^4]。 - 对于非 Java 开发者(如前端开发人员)参与配置的情况,XML 配置可能更容易理解修改。 2. **@Configuration @Bean 注解适用场景**: - 在现代 Java 项目中,尤其是使用 Spring Boot 的项目,推荐使用 @Configuration @Bean 注解的方式,以提高代码的简洁性可维护性[^2]。 - 当需要动态生成 bean 或在配置中包含复杂逻辑时,@Bean 注解的方式更具优势[^3]。 ```java @Configuration public class AppConfig { @Bean public MyService myService() { return new MyService(); } @Bean public AnotherService anotherService(MyService myService) { return new AnotherService(myService); } } ``` ###
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值