Autowired注解加载构件的顺序

技术文档网 2021-04-28

仅仅Autowired注解

@Autowired在查找构件时,会从构件库中查找所有构件,查找所有是被注解变量的类型或该类型的子类。

  1. 如果找到了且只找到了一个,那么就给被注解变量设置成此构件。
  2. 如果一个也没找到,看Autowired注解的required参数的值,如果是true(默认值)则失败,终止spring环境的启动;如果是false则给被注解变量赋值为null。
  3. 如果找到了多个:
    1. 如有在找到的多个中有且仅有一个构件被标注了@Primary,则使用这个。
    2. 如果@Primary有多个或者一个也没有,终止spring环境的启动,抛出异常。

Autowired注解和Qualifier注解一起使用

在使用@Autowired注解装载构件时,可以增加一个@Qualifier指定一个待装载构件的名字

@Autowired @Qualifier("thisone") MyObject myObject;

上面这种写法可以解决多个MyObject的子类被设置成component的状况 相应的,在构件上有两种写法:

@Service("thisone")
public MyObject{
}

也可以

@Qualifier("thisone")
@Service
public MyObject{
}

注意给构件起名不要重复,重名会抛异常的。

相关文章

  1. 基于-SLF4J-MDC-机制的日志链路追踪配置属性

    ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC

  2. ajax-跨域访问

    ajax 跨域访问 <!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head>

  3. 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache

    spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port

  4. Java动态代理

    Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public

  5. Java读取classpath中的文件

    public void init() { try { //URL url = Thread.currentThread().getContextClassLo

随机推荐

  1. 基于-SLF4J-MDC-机制的日志链路追踪配置属性

    ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC

  2. ajax-跨域访问

    ajax 跨域访问 <!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head>

  3. 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache

    spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port

  4. Java动态代理

    Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public

  5. Java读取classpath中的文件

    public void init() { try { //URL url = Thread.currentThread().getContextClassLo