spring in action一看就爱不释手,amazing!好书,深入浅出!以下内容归纳自该书。
一、概述
Spring框架是基于POJO的轻量级开发框架的领导者,其最根本的使命是:简化Java开发。
采取的策略:
1、基于POJO的轻量级、最小侵入性编程。
Spring竭力避免因自身API而扰乱你的代码,你只需关注自身业务的核心代码,spring负责将这些POJO赋予魔力。
2、通过依赖注入和面向接口实现松耦合。
耦合具有两面性,耦合是必须的,但必须小心谨慎地管理它。
参考 http://blog.csdn.net/u013051905/article/details/44986795
3、基于切面和惯例进行声明式编程。
依赖注入让相互协作的软件保持松耦合,而AOP编程允许你把某些功能分离出来形成可复用的组件。比如,安全、日志等,应该与你的核心业务逻辑相分离。
举例说明AOP的应用如下:
public class BraveKnight implements Knight{
private Quest quest;
private Minstrel minstrel;
public BraveKnight(Quest quest,Minestrel minestrel){
this.quest = quest;
this.minstrel = minstrel;
}
public void embarkOnQuest(){
minestrel.singBeforeQuest();
quest.embark();
minestrel.singAfterQuest();
}
}
以上代码的问题是:Knight还必须管理Minestrel,太累,太麻烦了!
将Minestrel声明为一个切面:
<beans>
<bean id="knight" class="com.knights.BraveKnight">
<constructor-arg ref="quest"></constructor-arg>
</bean>
<bean id="quest" class="com.knights.SlayDragonQuest"></bean>
<bean id="minstrel" class="com.knights.Minestrel"></bean>
<aop:config>
<aop:aspect ref="minestrel">
<aop:pointcut id="embark" expression="execution(* *.embarkOnQuest(...))"></aop:pointcut>
<aop:before pointcut-ref="embark" method="singleBeforeQuest"></aop:before>
<aop:after pointcut-ref="embark" method="singAfterQuest"></aop:after>
</aop:aspect>
</aop:config>
</beans>
AOP可以确保POJO保持简单。
4、通过切面和模板减少样本式代码。
Spring旨在通过模板封装来消除样本式代码,如以下的JdbcTemplate:
public class Tmp{
JdbcTemplate jdbcTemplate = new JdbcTemplate();
public Employee getEmployeeById(long id){
return jdbcTemplate.queryForObject(
"select id, firstname, lastname, salary from employee where id=?",
new RowMapper<Employee>(){
@Override
public Employee mapRow(ResultSet rs, int rowNum)
throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getLong("id"));
employee.setFirstname(rs.getString("firstname"));
employee.setLastname(rs.getString("lastname"));
employee.setSalary(rs.getBigDecimal("salary"));
return employee;
}
},
id);
}
}
二、wiring Bean
1、通过构造器注入
<pre name="code" class="html"><bean id="duke" class="com.....">
<constructor-arg value="15"/>
<constructor-arg ref="student"/>
</bean>
2、通过工厂方法创建Bean
<bean id="theStage" class="com..."
factory-method="getInstance"/>
......
发现原创性太少,自己的思考太少,以后多写自己心得感受,书上有的不再简单归纳。