zoukankan      html  css  js  c++  java
  • 2019.7.02 Spring自动注入

    7.01

    • @AutoWired默认优先寻找和类型一致的bean,如果容器存在多种类型的bean,默认会注入id和@Autowired注解的bean对象的名称一致的bean。可以使用@Qualifier(“XXXX(bean的id)”)来指定到底注入那个bean。如果在容器中找到相同类型的Bean,那么就会抛出异常,此时可使用@AutoWired注解的属性required=false,这样就会给这个bean==null。

    • 使用@Primary注解的Bean,在@autowired的时候,默认首先注入被@Primary注解的bean

    • 还支持使用@Resource(JSR250规范)和@Inject(JSR330)

    • @Resouces作用和@Autowired作用一样,可以用于自动装配,默认优先配置id和属性名一样的bean,也可以使用@Resources(name="XXX")来指定某个具体的Bean

    • @Autowired不仅可以注解到方法上,还可以注解到方法(也可以是构造器)上。

      @Component
      public class Car {
      
          private Person person;
      
          /*当注解到方法时,ioc容器初始化bean会把方法的入参从容器中自动获取,然后执行这个方法(构造器也是)*/
          @Autowired
          public void setPerson(Person person) {
              this.person = person;
          }
      
          @Override
          public String toString() {
              return "Car{" +
                      "person=" + person +
                      '}';
          }
      }
      
    • @Bean注解的方法形参默认从容器中获取

    • 注入到容器中的组件可以通过实现XXXAware接口来获取Spring底层的组件。

      @Component
      public class Car implements EmbeddedValueResolverAware {
      
          private Person person;
          private int age;
      
          /*当注解到方法时,会把方法的入参从容器中自动获取,然后执行这个方法*/
          @Autowired
          public void setPerson(Person person) {
              this.person = person;
          }
      
          @Override
          public String toString() {
              return "Car{" +
                      "person=" + person +
                      ", age=" + age +
                      '}';
          }
      
          @Override
          public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
              /*可以解析Spel*/StringValueResolver
              String s = stringValueResolver.resolveStringValue("你的系统是 ${os.name}");
              System.out.println(s);
          }
      }
      
    • @Profile指定那些组件在什么环境启用(用于数据源!!!!)

      • 在注册组件的时候,在方法(也可以是方法上,表明整个配置类下面的所有组件)上面加上@Profile("XXX(如test、dev等)"),那么容器启动的时候,会根据环境变量来判断那些组件是需要加载的(这个环境变量(-Dspring.profiles.active=test)可以通过设置jvm,也可以通过代码的方式,不过代码的方式必须是以无参的形式来创建容器)。如果没有被profile注解,不管什么环境都会被注册,前提是配置类没有被profile注解
  • 相关阅读:
    前端基础之CSS
    前端基础之HTML(三)
    前端基础之HTML(二)
    前端基础之HTML(一)
    面向对象总结
    内置函数总结
    函数部分总结
    文件操作总结
    基础数据类型总结
    python基础知识总结
  • 原文地址:https://www.cnblogs.com/mwss/p/11123083.html
Copyright © 2011-2022 走看看