spring入门——spring in action学习p1-p50

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"/>

......

发现原创性太少,自己的思考太少,以后多写自己心得感受,书上有的不再简单归纳。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值