我在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 和环境环境类有关。
正如您所看到的,这些类是由 @Autowired 注释注入的。
问题是我没有将bean定义到我的这些类的XML配置中。为什么要正确注射?这些bean的定义在哪里?
TNX
答案 0 :(得分:1)
Spring映射可以使用XML
或annotations完成。
在您的情况下,如果未定义XML,则MessageSource
和Environment
类应由Spring annotations @Service
或@Resource
@Component
映射}:
表示带注释的类 a"组件"。使用基于注释的配置和类路径扫描时,此类被视为自动检测候选。
<强> @Autowired
强>
@Autowired注释将尝试在弹簧上下文中找到类型为Foo的bean ,然后注入相同的内容。
@Resource
与此类似的是@Resource注释,它将尝试查找名为&#34; foo&#34;的bean。总而言之,按类型@Autowired导线和@Resource导线按名称。
答案 1 :(得分:1)
自动发现bean基于以下规则:
1)在spring-config.xml中使用context:annotation-config标签 春天使用注释
2)使用上下文:组件扫描标签 spring-config.xml并告诉Spring要查找的包 自动发现豆类 3)使用@Component注释来标记类 作为一个Spring自动发现的bean
如果使用@Component annotation
,则无需在spring-config.xml中声明bean声明
答案 2 :(得分:0)
Environment和MessageSource都与Spring Framework的内部工作密切相关。
环境是应用程序上下文的一部分,可用于自动装配。
ApplicationContext接口扩展了MessageSource接口,即使您尚未定义自己的消息源bean,也可以作为消息源进行自动装配。 (如果您定义自己的消息源,则应用程序上下文将为delegate to that)