20170704

来源:互联网 发布:php程序域名授权系统 编辑:程序博客网 时间:2024/05/16 11:46

1复习2017406和20170407内容
210题(完成5题)
320页
4jquery(未完成)

1
2
3
spring高级装配
3。1 环境与profile
定义profile可以让项目在运行时来确定加载哪些环境变量,在javaconfig中,是在config类名上增加
profile注解,在xml中,是在
激活profile需要两个属性
1 spring.profiles.active
2 spring.profiles.default
顾名思义,默认为default,若active有值则用active中的设置,若两者都无值,则不激活profile中的bean
激活设置profile的地方有多钟,其中一种是在 web。xml中加载

spring.profiles.active
dev

3.2 条件化的bean
当你希望一个bean只在某种情况下才会被加载时,你需要@Conditional注解
注解中加入condition类名.class ,实现Condition接口,只有一个方法boolean matches(ConditionContext context,annotatedmetadata met)
spring4 开始,profile进行了重构,也用到了condition注解,也是通过condition来实现环境的切换
3.3
处理自动装配的歧义性
一个接口有多个实现时,自动装配无法选择使用哪个实现,
此时有两种方法来处理
1在javaconfig中,加入@primary注解或者在xml中对指定的bean增加一个primary=“true”的属性
2使用qualifier注解 ,在引用处使用表明使用哪个id的bean,在定义生命bean处使用表明,自定义的id是什么
3.4 bean的作用域(scope)
spring的bean有几种作用域:
1单例
2原型:每次通过spring上下文获取时,创建一个新对象
3会话:在web应用中为每个会话创建一个实例
4请求:在web应用中,为每个请求创建一个实例
3.4.1 使用会话和请求作用域
例子:典型的电子商务应用中,可能会有一个bean代表用户的购物车,就该bean来说,会话作用域是最适合的
spring并不会把实际的bean注入到商店的service中,而是注入一个代理类,代理会暴露出相同的方法,当调用方法是,代理会懒解析并将调用委托给会话作用域内真正的bean
3.4.2 在 xml中声明作用域代理
3.5 运行时值注入
两种方式能让spring在运行时确定值来注入什么
1)属性占位符
2)spring表达式语言(spEL)
3.5.1 注入外部的值 5
最简单的方式,就是声明属性源,然后通过spring的environment来找到对应的属性.
javaconfig示例:
@Configuration
@PropertySource(“classpath:/com/soundsystem/app.properties”)
public class ExpressiveConfig {
@Autowired
Environment env;

        @Bean        public BlankDisc blankDisc() {            return new BlankDisc(env.getProperty("xxx"), env.getProperty("xxx"));        }    }    environment可以获得数据源中的相关属性    解析属性占位符3.5.2 使用spring表达式(spEL)语言进行装配    springEl有很多特性,比如        使用bean的id来引用bean        调用方法和访问对象的属性        对值进行算数、关系和逻辑运算        正则表达式匹配        集合操作    spEl样例    1表达式的格式为#{。。。}    #{T(System).currentTimeMillis()} 代表调用system的currentTimeMillis方法,T()表达式会将java.lang.system 视为java中对应的类型    2#{systemProperties('xxx.xxx')}:systemProperties 代表引用spring中配置的值    3表达式中使用bean     #{beanId.beanMethod()}