zoukankan      html  css  js  c++  java
  • Spring @Configuration注解及配置方法

    转自:https://www.jb51.net/article/184822.htm

    Spring @Configuration注解

    Spring3.0开始,@Configuration用于定义配置类,定义的配置类可以替换xml文件,一般和@Bean注解联合使用。

    @Configuration注解主要标注在某个类上,相当于xml配置文件中的<beans>

    @Bean注解主要标注在某个方法上,相当于xml配置文件中的<bean>

    等价于

    注意:@Configuration注解的配置类有如下要求:

    • @Configuration不可以是final类型;
    • @Configuration不可以是匿名类;
    • 嵌套的configuration必须是静态类。

    Configuration里面有一个component组件来标识,说明此类也是一个bean,可以被调用,来看看哪些主要的注解含有component:

    Annotation 的装配 Spring 中,尽管使用 XML 配置文件可以实现 Bean 的装配工作,但如果应用中有很多 Bean 时,会导致 XML 配置文件过于靡肿,给后续的维护和升级工作带来一定的困难 为此, Spring 提供了对 Annotation (注解)技术的全面支持 Spring 中定义了一系列的注解,常用的注解如下所示

    • • @Component: 可以使用此注解描述 Spring 中的 Bean ,但它是一个泛化的概念,仅仅表 示一个组件 (Bean ,并且可以作用在任何层次 使用时只需将该注解标注在相应类上即可
    • • @Repository: 用于将数据访问层( DAO 层)的类标识为 Spring 中的 Bean ,其功能与 @Component 相同
    • • @Service: 通常作用在业务层( Service ,用于将业务层的类标识为 Spring 中的 Bean 其功能与@Component 相同
    • • @Controller: 通常作用在控制层(如 Spring MVC Controller ,用于将控制层的类标识 Spring 中的 Bean ,其功能与@Component 相同
    • • @Autowired: 用于对 Bean 的属性变量、属性的 setter 方法及构造方法进行标注,配合对 应的注解处理器完成 Bean 的自动配置工作 默认按照 Bean 的类型进行装配
    • • @Resource: 其作用与 Autowired 一样 其区别在于@Autowired 默认按照 Bean 类型装 配,而@Resource 默认按照 Bean 实例名称进行装配 @Resource 中有两个重要属性: name type Spring name 属性解析为 Bean 实例名称, type 属性解析为 Bean 实例类型 如果 指定 name 属性,贝IJ 按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配;如 果都不指定,则先按 Bean 实例名称装配,如果不能匹配,再按照 Bean 类型进行装自己;如果都 无法匹配,则抛出 NoSuchBeanDefinitionException 异常
    • • @Qualifier: @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为接 Bean 的实例名称装配, Bean 的实例名称由 @Qualifier 注解的参数指定 在上面几个注解中,虽然@Repository @Service @Controller 功能与@Component 注解 的功能相同,但为了使标注类本身用途更加清晰,建议在实际开发中使用@Repository @Service @Controller 分别对实现类进行标注 下面。

    @Configuration

    这里的@Configuration对我们来说不陌生,它就是JavaConfig形式的Spring Ioc容器的配置类使用的那个@Configuration,SpringBoot社区推荐使用基于JavaConfig的配置形式,所以,这里的启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类。

    举几个简单例子回顾下,XML跟config配置方式的区别:

    表达形式层面

    基于XML配置的方式是这样:

    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8"?>
        default-lazy-init="true">
      <!--bean定义-->
    </beans>

    而基于JavaConfig的配置方式是这样:

    1
    2
    3
    4
    @Configuration
    public class MockConfiguration{
      //bean定义
    }

    任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。

    注册bean定义层面
    基于XML的配置形式是这样:

    1
    2
    3
    <bean id="mockService" class="..MockServiceImpl">
      ...
    </bean>

    而基于JavaConfig的配置形式是这样的:

    1
    2
    3
    4
    5
    6
    7
    @Configuration
    public class MockConfiguration{
      @Bean
      public MockService mockService(){
        return new MockServiceImpl();
      }
    }

    任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。

    表达依赖注入关系层面
    为了表达bean与bean之间的依赖关系,在XML形式中一般是这样:

    1
    2
    3
    4
    5
    <bean id="mockService" class="..MockServiceImpl">
      <propery name ="dependencyService" ref="dependencyService" />
    </bean>
     
    <bean id="dependencyService" class="DependencyServiceImpl"></bean>
     

    而基于JavaConfig的配置形式是这样的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Configuration
    public class MockConfiguration{
      @Bean
      public MockService mockService(){
        return new MockServiceImpl(dependencyService());
      }
      @Bean
      public DependencyService dependencyService(){
        return new DependencyServiceImpl();
      }
    }

    如果一个bean的定义依赖其他bean,则直接调用对应的JavaConfig类中依赖bean的创建方法就可以了。

  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/sharpest/p/13705254.html
Copyright © 2011-2022 走看看