@Configuration和@Bean的用法和理解


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入口,在這些類的上層包就行

 

用@Bean注解的方法:會實例化、配置並初始化一個新的對象,這個對象會由spring IoC 容器管理。

實例:

@Configuration
public class AppConfig {
 
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
 
}

 

 生成對象的名字:默認情況下用@Bean注解的方法名作為對象的名字。但是可以用 name屬性定義對象的名字,而且還可以使用name為對象起多個名字

@Configuration
public class AppConfig {
 
    @Bean(name = "myFoo")
    public Foo foo() {
        return new Foo();
    }
 
}
@Configuration
public class AppConfig {
 
    @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" })
    public DataSource dataSource() {
        // instantiate, configure and return DataSource bean...
    }
 
}

 

@Bean 一般和 @Component或者@Configuration 一起使用:@Component和@Configuration不同之處

在 @Component 注解的類中不能定義 類內依賴的@Bean注解的方法。@Configuration可以。

 

就像這樣,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


————————————————
版權聲明:本文為CSDN博主「有逼格d伊凡」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u012260707/article/details/52021265


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM