其他分享
首页 > 其他分享> > Spring 自动注入机制 和 常见注释

Spring 自动注入机制 和 常见注释

作者:互联网

Spring 自动注入机制

☀️ @Autowired (常用,最佳方式)

会根据注入的变量名字来寻找合适的 Bean。

❗ @Qualifier

用于解决注入冲突的,如下例子:

@Component
public class FooExample implenments Example(){
  public String example(){
      return "foo";
  }
}

@Component
public class BarExample implenments Example(){
  public String example(){
      return "bar";
  }
}

@Component
public class FooService(){
// 有注入异常,找不到唯一 Bean
  @Autowired
  private Example example;
}

// todo

如果尝试加载 FooService到上下文,那么会出现 NoUniqueBeanDefinationException。因为 Spring 不确定要注入哪个。

用 @Qualifier 可以解决,如下:

@Component
@Qualifier("fooExample")
public class FooExample implenments Example(){
  public String example(){
      return "foo";
  }
}

@Component
@Qualifier("barExample")
public class BarExample implenments Example(){
  public String example(){
      return "bar";
  }
}

@Component
public class FooService(){
   
// 此时即可唯一指定 Bean
  @Qualifier("fooExample")
  private Example example;
}

@Primary

使用 @Primary 注释的 Bean 总会被默认注入。但 @Qualifier 和 @Primary同时存在,则 @Qualifier > @Primary,因为前者唯一指定了。

@Component
// @Primary 默认注入 FooExample
@Primary
public class FooExample implenments Example(){
  public String example(){
      return "foo";
  }
}

@Component
public class BarExample implenments Example(){
  public String example(){
      return "bar";
  }
}

@Component
public class FooService(){
  @Autowired
  private Example example;
}

@Component

用于标记一个组件,当类不属于@Service、@Controller、@Repository 等,就可以标记该类。

开发常见三件套:

@Controller(注入服务):控制层

@Service(注入dao):服务层

@Repository(实现dao访问):数据访问层

结束语

Be better than before, never stop thinking!

参考

https://www.cnblogs.com/felordcn/p/12142471.html

标签:Qualifier,Spring,class,Component,Example,注释,example,public,注入
来源: https://www.cnblogs.com/acChris/p/15334401.html