SpringBoot @Autowire 为什么这个例子有效?
SpringBoot @Autowire why does this example work?
我创建了这个 class:
import org.springframework.stereotype.Component;
...
@Component("notTheNameTestMe") //shouldnt this only work with testMe ?
public class TestMe {
public void showMsg() {
System.out.println("Autowiring works");
}
}
我很快就会用这种方式使用它 class(或更好:控制器):
import com.example.TestMe; //shouldnt this be not necessary with autowire? But getting error else...
...
@Autowired
private TestMe testMe;
...
this.testMe.showMsg();
但这完美地工作(所以也许我不是真的在这里使用自动装配?),如果我将整个 TestMe class 重命名为 TestMeSomething 它甚至可以工作(如果我在第二个 [=18= 中调整导入])
我真的不明白@Autowired 是做什么的。我认为它只是扫描 SpringBoot 组件(由 @Component() 中的字符串命名,当它找到匹配项时它会注入依赖项。但在我的示例中,匹配是不可能的,我仍然可以看到消息“Autowiring works”在控制台中。如果我真的在这里使用自动装配,这不应该是这样的吗?我理解错了什么?那么使用 new TestMe() 有什么区别?我已经有了导入或依赖关系?所以不是真正的依赖注入,或者?
Spring 未对 @Component
注释中的名称进行操作。而是使用 class 的名称。它只是找到一个名为 TestMe
的 class,因为这是您用 @Autowired.
注释的变量的类型
我创建了这个 class:
import org.springframework.stereotype.Component;
...
@Component("notTheNameTestMe") //shouldnt this only work with testMe ?
public class TestMe {
public void showMsg() {
System.out.println("Autowiring works");
}
}
我很快就会用这种方式使用它 class(或更好:控制器):
import com.example.TestMe; //shouldnt this be not necessary with autowire? But getting error else...
...
@Autowired
private TestMe testMe;
...
this.testMe.showMsg();
但这完美地工作(所以也许我不是真的在这里使用自动装配?),如果我将整个 TestMe class 重命名为 TestMeSomething 它甚至可以工作(如果我在第二个 [=18= 中调整导入]) 我真的不明白@Autowired 是做什么的。我认为它只是扫描 SpringBoot 组件(由 @Component() 中的字符串命名,当它找到匹配项时它会注入依赖项。但在我的示例中,匹配是不可能的,我仍然可以看到消息“Autowiring works”在控制台中。如果我真的在这里使用自动装配,这不应该是这样的吗?我理解错了什么?那么使用 new TestMe() 有什么区别?我已经有了导入或依赖关系?所以不是真正的依赖注入,或者?
Spring 未对 @Component
注释中的名称进行操作。而是使用 class 的名称。它只是找到一个名为 TestMe
的 class,因为这是您用 @Autowired.