什么时候要用@Bean,什么时候不用@Bean,配置太多很杂乱

本文详细解释了在SpringFramework中使用@Bean注解的时机,包括自定义bean实例化、引入第三方库和配置,以及何时选择不使用它,如组件扫描和构造函数注入。
摘要由CSDN通过智能技术生成


在 Spring Framework 中,@Bean 注解通常用于告诉 Spring 容器如何实例化和配置一个特定的 bean。

一、什么时候使用 @Bean

1.自定义实例化逻辑

@Configuration
public class AppConfig {

    @Bean
    public MyBean myBean() {
        // 创建一个自定义的bean实例
        MyBean bean = new MyBean();
        
        // 添加自定义的实例化逻辑
        //我们可以在这里对bean进行任何必要的初始化操作
        
        return bean;   
	 }
}

在这个例子中,AppConfig类被标记为@Configuration,表示它是一个配置类。myBean方法被标记为@Bean,表示它会在Spring容器中定义一个名为"myBean"的bean。在myBean方法中,可以创建MyBean对象并执行任何必要的自定义实例化逻辑。

2.引入第三方库或外部组件

/**
 * MybatisPlus的分页插件
 */
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

3.修改第三方库的配置

下面展示如何使用@Bean来修改,Druid连接池的默认配置

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DruidDataSourceConfig {

    @Bean
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        // 设置数据库连接相关属性
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
        dataSource.setUsername("username");
        dataSource.setPassword("password");
        
        // 修改Druid连接池的配置
        dataSource.setMaxActive(20); // 设置最大活跃连接数
        dataSource.setInitialSize(5); // 设置初始连接数
        dataSource.setMinIdle(5); // 设置最小空闲连接数
        dataSource.setMaxWait(60000); // 设置获取连接的最大等待时间
        
        // 设置其他属性...
        
        return dataSource;
    }
}

上面的例子,创建了一个DruidDataSourceConfig配置类,并声明了一个名为dataSource的@Bean方法,返回一个DruidDataSource实例。在方法中,我们设置了数据库连接的URL、用户名和密码。然后,通过调用dataSource.setMaxActive()、dataSource.setInitialSize()等方法,修改了Druid连接池的默认配置。

二、什么时候不使用 @Bean

1.组件扫描

对于标记有 @Component、@Service、@Repository 或 @Controller 等注解的类,Spring 会自动进行组件扫描并注册它们,并将其实例化为 bean,不需要额外使用 @Bean。

@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

import org.springframework.stereotype.Service;

@Service
public class MyService {

    public String doSomething() {
        return "Something done";
    }
}

2.通过构造函数注入依赖

如果 bean 的依赖通过构造函数注入,并且这些依赖已经在容器中有了相应的配置,则不需要显式地使用 @Bean。(主要记住上面组件扫描)

@Service
public class MyService {

    private final Dependency dependency;

    public MyService(Dependency dependency) {
        this.dependency = dependency;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值