本文将简写@Autowired为@A ,@Resource为@R
结论:推荐使用@Autowired
不同点
- @A通过类型注入依赖。@R通过名称注入依赖
- @A先按类型自动查找与指定类型匹配的bean,找不到会抛出异常。@R自动查找与名称类型匹配的bean,找不到会使用默认的bean
- @A主要用于构造函数、属性、setter、方法和配置方法注入bean。@R主要用于字段注入
- @A只能在spring项目中使用。@R不受限制,兼容性较强
上方内容分析:
构造函数注入public class MyClass { private MyDependency myDependency; @Resource public MyClass(MyDependency myDependency) { this.myDependency = myDependency; } // ... }方法注入
—— 当在类上添加@Service注解时,Spring会自动将这个类注入到Spring容器中。这个类可以在其他类中以bean的方式注入到其他类中。当使用@Autowired注解时,Spring会在bean中找与指定类型相同的bean。如果找到了,就会将其注入到当前类中。
例如:
现在假设你有一个名为MyService的类,在其上方添加注解@Service,那么你可以在其他类中使用注解@Autowired将这个名为MyService的类注入到其他类当中。
@A示例:
在这个例子中,Spring会自动将MyRepository注入到MyService中。@Service public class MyService { @Autowired private MyRepository myRepository; // ... } @Repository public class MyRepository { // ... }
@R示例:
在这个例子中,Spring会自动将名为myBean的bean注入到MyService中。@Service public class MyService { @Resource(name = "myBean") private MyBean myBean; // ... } @Component public class MyComponent { @Resource(name = "myBean") private MyBean myBean; // ... }