如何将这些 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 messageSource 和 Environment env classes.
这两个对象有关
如您所见,这些 classes 是由 @Autowired 注释注入的。
问题是我没有将这些 class 的 bean 定义到我的 XML 配置中。那么为什么要正确注入呢?这些bean的定义在哪里?
Tnx
Spring 映射可以用 XML
或 annotations 完成。
在您的情况下,如果未定义 XML,则您的 MessageSource
和 Environment
类 应映射为 Spring annotations like @Component
@Service
或@Resource
:
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)
我是 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 messageSource 和 Environment env classes.
这两个对象有关如您所见,这些 classes 是由 @Autowired 注释注入的。
问题是我没有将这些 class 的 bean 定义到我的 XML 配置中。那么为什么要正确注入呢?这些bean的定义在哪里?
Tnx
Spring 映射可以用 XML
或 annotations 完成。
在您的情况下,如果未定义 XML,则您的 MessageSource
和 Environment
类 应映射为 Spring annotations like @Component
@Service
或@Resource
:
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)