[英]How are injected these classes into my Spring controller class?
我在Spring刚起步,对如何将某些类注入控制器类存有疑问。
进入我的项目,我有这个HomeController类:
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@Autowired
private MessageSource messageSource;
@Autowired
private Environment env;
.....................................................
.....................................................
.....................................................
}
我的怀疑与2个对象MessageSource messageSource和Environment env类有关。
如您所见,这些类是通过@Autowired注释注入的。
问题是我没有为这些类在XML配置中定义bean。 那么为什么要正确注射呢? 这些bean的定义在哪里?
TNX
Spring映射可以使用XML
或注释来完成。
在您的情况下,如果未定义XML,则应使用Spring批注(如@Component
@Service
或@Resource
映射您的MessageSource
和Environment
类:
指示带注释的类是 “组件”。 当使用基于注释的配置和类路径扫描时,此类会被视为自动检测的候选 。
@Autowired
@Autowired注解将尝试在春季上下文中找到Foo类型的bean,然后将其注入。
@Resource
与此类似的是@Resource批注,它将尝试查找名称为“ foo”的bean。 总而言之,@ Autowired导线按类型,@ Resource导线按名称。
Bean的自动发现基于以下规则:
1)在spring-config.xml中使用context:annotation-config标签让Spring使用Annotations
2)在spring-config.xml中使用context:component-scan标记,并告诉Spring在其中寻找自动发现bean的包
3)使用@Component批注将类标记为Spring自动发现的bean
如果使用@Component annotation
,则不需要在spring-config.xml中声明Bean声明。
Environment和MessageSource都与Spring Framework的内部工作紧密相关。
该环境是应用程序上下文的一部分,将可用于自动装配。
ApplicationContext接口扩展了MessageSource接口,即使您尚未定义自己的消息源Bean,也可以将其作为消息源进行自动装配。 (如果您定义自己的消息源,则应用程序上下文将委托给该消息源)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.