SpringBoot之@Component,@Bean与@Configuration配置

目前对于Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。而完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。

接下来我们只是初级的认识它们

一 . 对于XML配置方式如下:

  1. id="helloWorld" class="me.spring.beans.HelloWorld">
  2. name="name" value="Spring">
  3. id="car" class="me.spring.beans.Car">
  4. value="Audi">
  5. value="ShangHai">
  6. value="300000">
  7. id="car2" class="me.spring.beans.Car">
  8. value="Baoma">
  9. type="java.lang.String">
  10. ]]>
  11. value="240" type="int">
  12. id="person" class="me.spring.beans.Person">
  13. name="name" value="Tom">
  14. name="age" value="24">
  15. name="car">
  16. class="me.spring.beans.Car">
  17. value="Ford">
  18. value="ChangAn">
  19. value="2354395" type="double">

二 .对于自动配置有这几个注解:
1、@controller 控制器(注入服务)
2、@service 服务(注入dao)
3、@repository dao(实现dao访问)
4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的)
@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。
用这些注解需要在配置文件中引用这句话

  1. base-package=”com.mmnc”>

其中base-package为需要扫描的包(含所有子包)
1、@Service用于标注业务层组件
2、@Controller用于标注控制层组件(如struts中的action)
3、@Repository用于标注数据访问组件,即DAO组件.
4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
三.对于Java配置的话,目前使用的是@Configuration@Bean组成

  1. @Configuration
  2. public class AppConfig {
  3. @Bean
  4. public MyService myService() {
  5. return new MyServiceImpl();
  6. }
  7. }

相当于XML的

  1. id="myService" class="com.acme.services.MyServiceImpl"/>

生成对象的名字:默认情况下用@Bean注解的方法名作为对象的名字。但是可以用 name属性定义对象的名字,也可以多个。

  1. @Configuration
  2. public class AppConfig {
  3. @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" })
  4. public DataSource dataSource() {
  5. // instantiate, configure and return DataSource bean...
  6. }
  7. }

在这种配置中,@Bean配置的对象互相调用时是同个对象,而且有些第3方的配置也只能用这种方式,如druid

  1. @Bean
  2. public DataSource dataSource() {
  3. try {
  4. String ip = env.getProperty("db.ip", "127.0.0.1");
  5. String port = env.getProperty("db.port", "3306");
  6. String name = env.getProperty("db.name", "ewhjjsaj");
  7. String user = env.getProperty("db.username", "tesddot");
  8. String pass = env.getProperty("db.password", "000000000");
  9. DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
  10. String url = StrUtil.format("jdbc:mysql://{}:{}/{}?useUnicode=true&characterEncoding=UTF-8&useSSL=true", ip, port, name);
  11. druidDataSource.setUrl(url);
  12. druidDataSource.setUsername(user);
  13. druidDataSource.setPassword(pass);
  14. return druidDataSource;
  15. } catch (Exception e) {
  16. log.error("初始化数据源出错,错误信息:{}", e.getMessage());
  17. throw new RuntimeException(e);
  18. }
  19. }

后来在SpringBoot中,都是第2种和第3种搭配使用,而且XML文件完全不用了