读Spring实战心得一Spring之旅

一、使用Spring来简化开发的4种策略

1.基于pojo的轻量级和最小侵入性编程
2.通过依赖注入和面向接口实现松耦合
3.基于切面和惯例进行声明式编程
4.通过切面和模板减少样式代码

二、依赖注入DI
这里我们假设一个程序

public class NewKnight implements Knight{
	private Sword sword;
	public NewKnight(){
		this.sword = new BigSword();
	}
	@Override
	public void test(){
		sword.use();
	}
}

当我们实例化这个类并调用其重写的test()方法时。
1.我们得实例化BigSword类
2.使用BigSword类对象的use()方法

这样一来,我们就将这个NewKnight与BigSword超级耦合在一起了。不利于调试而且容易出现一连串的BUG。

第二个程序

public class NewKnight implements Knight{
	private Sword sword;
	public NewKnight(Sword sword){
		this.sword = sword;
	}
	@Override
	public void test(){
		sword.use();
	}
}

这个程序依赖与构造器注入,相当于我们在创建这个骑士时就给他发了一把?,而这个剑具体是那种剑和有什么功能(只要实现sword接口的剑就可了)我们都不知道。这就降低了耦合。

三、装配bean
这里我们使用xml形式。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
//以上是spring的头文件,不必关心

//装配的bean,id为“knight”
<bean id="knight" class="com.fs.model.NewKnight">
  //构造器的参数,ref代表连接是id为“sword”的bean
  <constructor-arg ref="sword"/>
  </bean>
<bean id="sword" class="com.fs.model.GoldenSword"></bean>
</beans>

我们通过上下文Application来创建和装载bean
因为我们用的xml文件来配置bean
所以这里使用ClassPathXmlApplicationContext来作为上下文

测试代码

@Test
	public void test(){
		
		ClassPathXmlApplicationContext util = new ClassPathXmlApplicationContext("spring-demo1.xml");
		Knight knight = (Knight) util.getBean("knight");
		knight.test();
		util.close();
	}

这样我们就使用完成了。

四、应用切面AOP
我对于AOP的理解呢,就是代理模式。
首先我们给出条件,假如我想以后有钱了给希望工程每天捐款,而我关心的是把钱打给希望工程就可以了,不需要关心钱从哪儿来,到哪儿去。甚至不需要知道谁用掉了。
而希望工程这个类呢就帮我们做前后工作。
上代码

public class NewKnight implements Knight{
	private Sword sword;
	public NewKnight(Sword sword){
		this.sword = sword;
	}
	@Override
	public void test(){
		sword.use();
	}
	@Override
	public void testWithAop() {
		System.out.println("我捐钱了");
	}
	
}

testWithAop就是我去捐钱方法

public class Singer {
	
	public void before(){
		System.out.println("她好牛逼");
	}
	public void after(){
		System.out.println("他真的好牛逼啊!");
	}
	
}

这就是给我加油的希望工程类

我们在xml文件中配置这个切面

//这就是我们的希望工程类
<bean id="singer" class="com.fs.model.Singer"></bean>
//aop文件的头
<aop:config>
//通过ref,设置id为singer的为切面类
<aop:aspect ref="singer">
//定义切点处执行的方法
<aop:pointcut id="whatever" expression="execution(* com.fs.model.NewKnight.test(..))"/>
//在切点方法前执行
<aop:before pointcut-ref="whatever" method="before"/>
<aop:after pointcut-ref="whatever" method="after"/>
</aop:aspect>
</aop:config>

五、使用模板消除重复代码
比如JDBC编程中,我们只关心sql语句,其他的步骤都是繁琐的。
我们可以使用spring来帮助。
六、Bean生命周期和上下文
1.我们可以通过上下文来从Spring容器中通过getBean()方法来得到Bean。
我们使用得较多的是ClassPathXmlApplicationContext

Bean的生命周期
实例化bean对象(通过构造方法或者工厂方法)
设置对象属性(setter等)(依赖注入)
如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。(和下面的一条均属于检查Aware接口)
如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身
将Bean实例传递给Bean的前置处理器的postProcessBeforeInitialization(Object bean, String beanname)方法
调用Bean的初始化方法
将Bean实例传递给Bean的后置处理器的postProcessAfterInitialization(Object bean, String beanname)方法
使用Bean
容器关闭之前,调用Bean的销毁方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值