您现在的位置是:网站首页>>信息浏览 文章详情

SpringBoot之@Component,@Bean与@Configuration配置
2019-01-03 16:12 许多年以后 2807

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

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

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

  1. <!--
  2. 配置bean
  3. class:bean的全类名,通过反射的方式在IOC容器中创建bean
  4. id:表示容器中的bean,id唯一
  5. -->
  6. <!-- 通过setter注入配置bean的属性 -->
  7. <bean id="helloWorld" class="me.spring.beans.HelloWorld">
  8. <property name="name" value="Spring"></property>
  9. </bean>
  10. <!-- 通过构造方法配置bean的属性 -->
  11. <bean id="car" class="me.spring.beans.Car">
  12. <constructor-arg value="Audi"></constructor-arg>
  13. <constructor-arg value="ShangHai"></constructor-arg>
  14. <constructor-arg value="300000"></constructor-arg>
  15. </bean>
  16. <!--
  17. 使用构造器注入的属性值可以指定参数的类型和参数的位置,以区分重载的构造器
  18. 如果字面值包含特殊字符,可以使用<![CDATA[]]>包裹起来
  19. 属性值也可以使用value子节点进行配置
  20. -->
  21. <bean id="car2" class="me.spring.beans.Car">
  22. <constructor-arg value="Baoma"></constructor-arg>
  23. <constructor-arg type="java.lang.String">
  24. <value><![CDATA[<Beijing>]]></value>
  25. </constructor-arg>
  26. <constructor-arg value="240" type="int"></constructor-arg>
  27. </bean>
  28. <!-- 可以使用property的ref属性建立bean之间的引用关系 -->
  29. <bean id="person" class="me.spring.beans.Person">
  30. <property name="name" value="Tom"></property>
  31. <property name="age" value="24"></property>
  32. <!--
  33. <property name="car" ref="car2"></property>
  34. -->
  35. <!--
  36. <property name="car">
  37. <ref bean="car2"/>
  38. </property>
  39. -->
  40. <!-- 内部bean,不能被外部引用 -->
  41. <property name="car">
  42. <bean class="me.spring.beans.Car">
  43. <constructor-arg value="Ford"></constructor-arg>
  44. <constructor-arg value="ChangAn"></constructor-arg>
  45. <constructor-arg value="2354395" type="double"></constructor-arg>
  46. </bean>
  47. </property>
  48. </bean>

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

  1. <context:component-scan 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. <beans>
  2. <bean id="myService" class="com.acme.services.MyServiceImpl"/>
  3. </beans>

生成对象的名字:默认情况下用@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文件完全不用了

赞 (61)
文章出处:书生个人博客          转载注明下哦!o(≧v≦)o~~

标签: springboot系列

相似文章:


随便说两句
请先登录
遵守国家法律法规,请勿回复无意义内容,请不要回复嵌套过多的楼层!