spring配置文件对应的是父容器,springMVC配置文件产生的是子容器,前者一般配置数据源,事务,注解等,当然还可以进一步将一些配置细化到其他xml中;后者一般配置控制层相关的,如静态资源,视图解析器等。系统启动的时候,先初始化父容器,然后初始化子容器。这里会涉及一个问题,如果配置组件扫描时都配置全组件扫描,就会导致service组件会被扫描两次,造成事务无法处理。所以最好在springMVC配置文件中只做controller的扫描,在spring配置文件中扫描其他组件。
在spring的配置文件中配置:- 1
在springMVC的配置文件中配置:
- 1
这样就能各司其职了。
在使用中,这两个配置文件作用不同。如果要使用@Value注入一些系统配置文件中的变量时要注意:如果要在controller中使用注入的变量,需要在springMVC的配置文件中配置:- 1
如果只在spring的配置文件中配置,那么在controller中是不会注入成功的。
测试demo如下:@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = { "classpath:applicationContext.xml","classpath:servlet-dispatcher.xml"})public class InjecTest { @Value("${ly.key}") private String key; @Test public void test(){ System.out.println("注入的key为:"+key); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
基于@Value进行注入时有两种方式,占位符和spel表达式
//占位符方式 @Value("${jdbc.url}") private String url;
- 1
- 2
- 3
//SpEL表达方式,其中代表xml配置文件中的id值configProperties @Value("#{configProperties['jdbc.username']}") private String userName;
- 1
- 2
- 3
这两种方式需要在xml中配置时也是不一样的
classpath:config/resource/dev/application.properties classpath:config/resource/dev/lyframework.properties classpath:config/resource/dev/common.properties
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
classpath:/conf/jdbc.properties
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8