@recources与@Autowired的继承注入

      • 前言
      • 扩展知识
      • 代码
        • interface
        • ManImpl
        • WomenImpl
      • 使用注解
      • 总结

前言

对于一个接口,如果有好几个类继承它,注入的时候@recources 与 @Autowired 还是有点区别的

扩展知识

springmvc中的@Resource与@Autowired注解的区别

代码

interface

package com.cn.artifact.Service;

public interface Human {
    void speak();
}

ManImpl

package com.cn.artifact.Service;

import org.springframework.stereotype.Service;

@Service
public class ManImpl  implements Human{
    @Override
    public void speak() {
        System.out.println("ManImpl");
    }
}

WomenImpl

package com.cn.artifact.Service;

import org.springframework.stereotype.Service;

@Service
public class WomenImpl implements  Human {
    @Override
    public void speak() {
        System.out.println("WomenImpl");
    }
}

使用注解

1) service不在主入口类同一级或者下一级,就不能注入,这应该是springboot的原因

2)

  @Autowired
   private Human human;

   @Resource
   private Human human;

两种都异常:Human有两个继承类
3)

  @Resource(name = "ManImpl")
   private Human human;

大写该类名,无法注入

4)

  @Resource(name = "manImpl")
  private Human human;

正常,调用manImpl类
5)

  @Autowired
  private ManImpl manImpl;

正常,调用manImpl类

6)

 @Autowired
 private WomenImpl manImpl;

正常,调用WomenImpl类

7)

@Resource(name = "womenImpl")
private WomenImpl manImpl;

正常,调用womenImpl类

8)

@Resource(name = "womenImpl")
 private ManImpl manImpl;

异常,不能注入(resource注入的与private 不符合)

总结

1.resource的byName应该是指@service(name=”“)里的name,当没有name值时用该类的type,即为类名的首字母小写
2.resource(name=”“)中的name若与private 的类不符,也会异常
3.与最后 private Human human human的名字无关,可以为private Human aa
4.resource注入若(@resource(name=”“)),而service上有name=”aa”,会用 name 找到相应的类注入

你可能感兴趣的:(autowired)