1.1 简化Java开发
- 基于POJO的轻量级及最小侵入编程
Spring的一大特点是最小侵入性编程,它不会强迫我们去实现它的接口或实现类,POJO依旧是那个POJO。我们只是将依赖交由Spring管理,因此,IOC配置也就是Bean的装配便是很大一部分工作。 - 依赖注入
public class DamselRescuingKnight implements Knight{
private RescueDamselQuest quest;
public DamselRescuingKnight(){
this.quest=new RescueDamselQuest();
}
public void embarkonQuest(){
quest.embark();
}
缺点:紧耦合的代码难以测试与复用,RescueDanselQuest和DamselRescuingKnight紧密地联系在一起,DamselRescuingKnight无法调用其他类的embark()方法。
public class BravegKnight implements Knight{
private Quest quest;
public BravegKnight (Quest quest){
this.quest=quest;
}
public void embarkonQuest(){
quest.embark();
}
优点:传入的参数类型是Quest,这样BraveKnight可以响应实现Quest接口的任意实现。如果一个对象只通过接口来表明依赖关系,那这种依赖就能够在对象本身不知情的情况下,用不同的具体实现进行替换。
- 应用切面:把遍布应用各处的功能分离出来形成可重用的组件。
<aop:config>
<aop:aspect ref='minstrel'> //把minstrel bean声明为一个切面
<aop:pointcut id='embark'
expression="execution(* *.embarkOnQuest(..))"/> //定义切点
<aop:before pointcut-ref="embark"
method="singleBeforeQuest" />
<aop:after pointcut-ref="embark"
method="singleAfterQuest" />
<aop:aspect>
</aop:config>
1.2 容纳你的Bean
- BeanFactory和ApplicationContext
BeanFactory是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能。ApplicationContext继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能,如AOP等。
BeanFactory在启动的时候不会去实例化Bean,中有从容器中拿Bean的时候才会去实例化。ApplicationContext在启动的时候就把所有的Bean全部实例化了。 - ApplicationContext:
AnnotationConfigApplicationContext: 从java的配置类中加载Spring应用上下文
AnnotationConfigWebApplicationContext:从java配置类中加载Spring web应用上下文
ClassPathXmlApplicationContext:从xml配置文件中加载上下文定义,把应用上下文的定义文件作为类资源
FileSystemXmlApplicationContext:从文件系统下的一个或多个xml文件加载上下文
XmlWebApplicationContext:从web应用下的一个或多个xml文件加载上下文