如何将这些 classes 注入我的 Spring 控制器 class?

How are injected these classes into my Spring controller class?

我是 Spring 的新手,我对如何将一些 class 注入控制器 class。

有一些疑问

在我的项目中我有这个 HomeController class:

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    @Autowired
    private MessageSource  messageSource;
    @Autowired
    private Environment env;

    .....................................................
    .....................................................
    .....................................................
}

我的疑问与 MessageSource messageSourceEnvironment env classes.

这两个对象有关

如您所见,这些 classes 是由 @Autowired 注释注入的。

问题是我没有将这些 class 的 bean 定义到我的 XML 配置中。那么为什么要正确注入呢?这些bean的定义在哪里?

Tnx

Spring 映射可以用 XMLannotations 完成。

在您的情况下,如果未定义 XML,则您的 MessageSourceEnvironment 类 应映射为 Spring annotations like @Component @Service@Resource:

@Component

Indicates that an annotated class is a "component". Such classes are considered as candidates for auto-detection when using annotation-based configuration and classpath scanning.

@Autowired

@Autowired annotation will try to find a bean of type Foo in the spring context and will then inject the same.

@Resource

Similar to this is @Resource annotation that will try to find the bean with the name "foo". To summarize, @Autowired wires by type and @Resource wires by name.

bean 的自动发现基于以下规则:

1) Use context:annotation-config tag in spring-config.xml to let Spring use Annotations
2) Use context:component-scan tag in spring-config.xml and tell Spring the package in which to look for auto-discovering beans
3) Use @Component annotation to mark a class as a Spring auto-discoverable bean

如果使用@Component annotation,那么bean的声明不需要在spring-config.xml

中声明

这两个 Environment and the MessageSource 都与 Spring 框架的内部运作密切相关。

环境是应用程序上下文的一部分,可用于自动装配。

ApplicationContext 接口扩展了 MessageSource 接口,并且可以作为消息源自动装配,即使您没有定义自己的消息源 bean。 (如果您定义自己的消息源,应用程序上下文将 delegate to that