spring高级转配

1、profile 为不同的环境配置不同的文件
1.1、java配置:@Profile(“dev”) 配合@Configuration使用
指定bean属于dev环境下
@Profile 在spring3.2之后支持放到方法上

1.2、xml配置:可以把不同的bean放到同一个xml文件中,
	<beans profile="dev"></beans>

2、如何激活profile对应的环境
2.1、spring.profiles.active/default
检测顺序:active,default
激活的方式:1dispatcherServlet初始化参数时;2contextParam web上下文参数
3JNDI;4环境变量;5@ActiveProfile

3、条件下的bean
3.1、@Conditional注解,用到带bean的注解方法、类上
如果conditional 的条件为true,则实例化该bean
注意:@Conditional(“Extend.class”),该类必须impelement Condition接口,实现matcher方法,重写生成bean的规则

3.2、AnnotatedTypeMetadata 有查询特定注解、所有的注解、是否有其他注解等等方法。
@Profile 是用@Conditional实现的,分析是如何实现的

4、处理装配的歧义性
4.1、eg:有3个类实现一个接口,如果注入接口,spring不知道注入哪个bean;
解决办法:1、@primary 定义首选
2、@Qualifer id指定bean
4.2、创建自定义的限定符:
在class上@Qualifer(“cool”)和componment一起使用
4.3、spring支持多个@Qualifer,即多限定条件
java有所限制,不允许多个@Qualifer在同一方法、属性上,
为了解决这个问题,可以自定义注解

5、bean的作用域
5.1、默认情况下,注入的bean是单例
改变的方式@Scope(),改变bean的作用域
作用域有:1、singleton;2、prototype:每次注入或上下文获取时,都是新的bean;
3、session;4、request

scope的另外的属性:
	scopedProxyMode.Interface 指定代理类
	使用场景:当把多个session的购物车,放到单例中,要用到代理模式
	如果是class:要用cgLib
	
	xml指定动态代理<aop:scope_proxy/>

运行时注入:
创建一个PropertySourcePlaceholderConfigurer bean对象

	类中运行时引入配置文件的值
	@PropertySource("classpath:/com/bigData/farm/app.property"  引入配置文件
	Sting result= Environment.getProperty(String s)
	getProperty  有很多重载,返回值可以转成bean
	
	解析属性占位符
	1、在xml文件中引用,用${"title"} 占位符
	2、在java中使用,用@Value("${title}")

猜你喜欢

转载自blog.csdn.net/wangjunfeng1234/article/details/82834394