第一章
简化Java开发
- 基于POJO的轻量级和最小侵入性编程
- 通过依赖注入和面向接口实现松耦合
- 基于切面和惯例进行声明式编程
- 通过切面和模板减少样板式代码
第二章
2.1Spring配置方案
- XML
- Java Config
- 自动化装配
2.1.1自动化装配
A. 组件扫描(component scan)
自动发现配置
配置方式 | 使用元素 |
---|---|
@Configuration | @ComponentScan(value="package", basePackages={"",""}) |
XML | <context:component-scan> |
bean注解
Spring | JSR330(Java Dependency Injection) | value属性 |
---|---|---|
@Component | @Named | bean id |
B. 自动装配(autowiring)
Spring|JSR330(Java Dependency Injection)
---|---|---
@Autowired|@Inject
2.1.2JavaConfig装配
- 主要用于将第三方库的组件装配为bean
- 配置代码,不应包含业务逻辑
- 强大,类型安全,重构友好
@Bean注解
方法名或者注解name属性作为bean的id,Spring会拦截所有@Bean标注的方法的调用,不会每次都进行实际的调用,而会直接返回该方法创建的bean(所以多次调用返回的是同一个对象)
2.1.3XML装配
<construct-arg> 构造器配置
<property> setter配置
<util:list> util命名空间将某个类型的值或者引用暴露为bean
第三章
3.1 Profile
@Profile("dev") | <beans profile="dev">
通过spring.profiles.active和spring.profiles.default来配置,可以在如下的地方配置;
- DispatcherServlet的初始化参数<init-param>
- Web应用的上下文参数<context-param>
- JNDI条目
- 环境变量
- JVM系统属性
- 测试类上,@ActiveProfiles
3.2 条件bean
@Conditional(Condition.class)
public interface Condition {
/**
* Determine if the condition matches.
* @param context the condition context
* @param metadata metadata of the {@link org.springframework.core.type.AnnotationMetadata class}
* or {@link org.springframework.core.type.MethodMetadata method} being checked.
* @return {@code true} if the condition matches and the component can be registered
* or {@code false} to veto registration.
*/
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}
3.3消除自动装配的歧义
@Autowired and @Inject
- Matches by Type
- Restricts by Qualifiers
- Matches by Name
@Resource
- Matches by Name
- Matches by Type
- Restricts by Qualifiers (ignored if match is found by name)
3.4bean作用域
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.INTERFACES)
<bean scope="session">
<aop:scoped-proxy proxy-target-class="false" />
</bean>
3.5运行时值注入
- property placeholder
- SpEL
3.5.1placeholder
- @PropertySource("properties") 配置文件源
- @Bean PropertySourcesPlaceholderConfigurer | <context:property-placeholder> 解析占位符${}
- 使用占位符->Environment
3.5.2SpEL
- 使用bean id引用bean
- 调用方法和访问属性
- 进行逻辑、关系和算术运算
- 正则表达式 matches 返回true|false
- 集合操作
[index]
.?[test expression] 用于生成满足条件的子集
.^[test] | .$[test] 查询第一个和最后一个匹配项
.![attribute] 投影元素的特定属性,生成这个属性的集合
"#{1}" 字面值
"#{beanid.method()|attribute}" 获取bean的方法和属性
"#{T(com.meizu.yard.spring.Env).getProperty('ebk.database.url')}" 读取配置文件(类作用域的方法和属性)
"#{systemProperties['jdk']}" 系统属性
网友评论