• 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注解
  • 相关阅读:
    STL容器list容器API
    STL容器之list基本概念
    STL容器queue的API
    做tab切换时,点击浏览器返回拿不到实时的tab参数,请求不到实时的数据
    v-for渲染出来的列表,要根据不同的状态改变样式,通过给标签添加lang属性完成
    清除每隔5000毫秒请求一次接口的定时器(需求:每当我手动核销电子码,页面上的显示数据要实时更新到)
    ES6数组解构赋值
    es6 var、let、const命令
    canvas计算高度(自定义高度)
    Vue 点击button请求接口,接收不到返回的参数
  • 原文地址:https://www.cnblogs.com/mwss/p/11123083.html
Copyright © 2020-2023  润新知