《Spring in action》之高级装配
1.Spring 通过配置profile bean、激活profile来设置对应环境。
配置profile bean:
可通过@Profile("dev")注解进行配置、也可以通过xml配置。
激活profile:方法有很多
常用:作为DispatcherServlet初始化参数,例如在web.xml中的<context-param>中配置
2.处理自动装配的歧义性
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = PhoneConfig.class) public class PhoneTest { @Autowired @Qualifier("huawei") private Phone phone; @Test public void checkPhone(){ phone.speak(); Assert.assertNotNull(phone); } }
当phone接口有多个实现时只用 @Autowired是有问题的还需要使用限定符 @Qualifier("huawei")、“huawei“这个是bean的id。
3.Bean的作用域
单例(Singleton):整个应用一个实例
原型(Prototype):每次注入或通过上下文获取时创建一个新的实例
会话(Session):为每个会话创建一个实例
请求(Request):为每个请求创建一个实例
组件扫描中:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class Apple implements Phone{ @Override public void speak() { System.out.println("apple speak"); } }
xml配置:scope="prototype"
<bean id="playUtil" class="com.spring.aop.PlayUtil" scope="prototype"/>
使用会话和请求作用域很适合购物车场景、购物车bean应该是1个会话一个