欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

springboot為什么要configuration而不用component

springboot為什么要configuration而不用component?

@Component和@Configuration都屬于Spring所提供的注解,兩者可謂各司其職。

共同點(diǎn)

@Component這個(gè)注解,從剛開始的SpringMVC到現(xiàn)在的SpringBoot,我們都一直有接觸到,我們也知道它的功能,它幫我們實(shí)現(xiàn)了聲明一個(gè)bean注入到IOC容器中。

另一個(gè)注解@Configuration,它們有個(gè)共同點(diǎn),便是它也可以聲明一個(gè)bean注入到IOC容器中。

特別點(diǎn)

那這樣的話,@Configuration的意義是什么呢?

在我看來,@Configuration這個(gè)注解,是最能詮釋Spring的去配置文件這個(gè)工作的注解,因?yàn)檫@個(gè)注解有一個(gè)很大的作用,它可以代替xml文件,生成類似<beans>的結(jié)果。

也就是除了本身外,它可以在類中通過@Bean注解來注入多個(gè)Bean到IOC容器中。

如下:

@Configurationpublic class ExampleConfiguration {// 獲取到application.properties里的com.mysql.jdbc.Driver配置項(xiàng)@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;//通過@Configuration和@Bean注解,將注入一個(gè)名稱為dataSource的Bean,這個(gè)Bean的主體,便是dataSource()這個(gè)方法的結(jié)果@Bean(name = "dataSource")public DataSource dataSource() {BasicDataSource dataSource = new BasicDataSource();dataSource.setDriverClassName(driverClassName);dataSource.setUrl(driverUrl);dataSource.setUsername(driverUsername);dataSource.setPassword(driverPassword);return dataSource;}// 還能再繼續(xù)注入其他的Bean@Beanpublic PlatformTransactionManager transactionManager() {return new DataSourceTransactionManager(dataSource());}}

之后在需要使用該Bean的地方,便可以使用

@Autowiredprivate DataSource dataSource;

來注入,并使用。

注意點(diǎn)

在使用@Configuration這個(gè)注解的時(shí)候,有幾點(diǎn)是需要注意的,我們順便提一下:

配置類必須以類的形式提供(不能是工廠方法返回的實(shí)例),允許通過生成子類在運(yùn)行時(shí)增強(qiáng)(cglib 動(dòng)態(tài)代理)。

配置類不能是 final 類(沒法動(dòng)態(tài)代理)。配置注解通常為了通過 @Bean 注解生成 Spring 容器管理的類,配置類必須是非本地的(即不能在方法中聲明,不能是 private)。任何嵌套配置類都必須聲明為static。@Bean 方法可能不會(huì)反過來創(chuàng)建進(jìn)一步的配置類(也就是返回的 bean 如果帶有 @Configuration,也不會(huì)被特殊處理,只會(huì)作為普通的 bean)。

java cglib增強(qiáng),springboot為什么要configuration而不用component