Hollywood Principle : Don't call us , we call you。 好莱坞原则:不要打电话给我,我会打电话给你。
反转控制:其相关依赖或数据由别的服务提供,而非自己读取,类似于响应式编程,响应式编程就是非主动拉取而是以推送获取的方式(即当一个事物发生状态变化时,其他事物将被相应地通知和更新)。
Spring IoC的主要实现策略
- Service locator pattern:服务定位模式。Java EE 中使用的模式,一般通过 JNDI 技术获取Java EE组件,如获取 EJB 组件,或者DataSource相关数据源。
- Dependency injection:依赖注入,主要包含以下几种方式,
- 构造器注入
- 参数注入
- Setter注入
- 接口注入
依赖注入不仅在 Spring Framework 中被使用,在EJB 3.0 里也被运用
- ContextUalized lookup:上下文的依赖查询。 Spring 参考了Java Beans中的实现方式,Java beans 中有一个通用的上下文 beancontext,既可以传输bean,又可以管理bean的层次 。
java.beans.beancontext:The BeanContext acts a logical hierarchical container for JavaBeans.充当JavaBean的逻辑层次结构容器。
例如:Spring 对 jdbc 的实现用到 JdbcTemplate,JdbcTemplate这样的实现里使用了一种类似于StatementCallback,这种callback的回调方法帮助我们实现的更为抽象,当实现这样的接口时,不需要关心callback从哪来,这样也是一种反转控制,即传统的 jdbc 直接调用 sql 命令的执行其实是个相反的操作。
@Override
public void execute(final String sql) throws DataAccessException {
if (logger.isDebugEnabled()) {
logger.debug("Executing SQL statement [" + sql + "]");
}
/**
* Callback to execute the statement.
*/
class ExecuteStatementCallback implements StatementCallback<Object>, SqlProvider {
@Override
@Nullable
public Object doInStatement(Statement stmt) throws SQLException {
stmt.execute(sql);
return null;
}
@Override
public String getSql() {
return sql;
}
}
execute(new ExecuteStatementCallback());
}
- Strategy Design patten:策略模式