1、Spring實現了工廠模式的工廠類,這個類名為BeanFactory實際上是一個接口,在程序中通常BeanFactory的子類ApplicationContext。Spring相當于一個大的工廠類,在其配置文件中通過<bean>元素配置用于創建實例對象的類名和實例對象的屬性。
2、Spring提供了對IOC良好的支持,IOC是一種編程思想,是一種架構藝術,利用這種思想可以很好地實現模塊之間的解耦。IOC也稱為DI(Depency Injection),什么時候注入呢?
譬如:
class Programmer{
Computer computer=null;
public void code(){
//Computer computer=new IBMComputer();
//Computer computer=beanfactory.getComputer();
computer.writer();
}
public void setComputer(Computer computer){
this.computer=computer;
}
}
另外兩種方式都由依賴,第一個直接依賴于目標類,第二個把依賴轉移到工廠上,第三個徹底與目標和工廠解耦了。在Spring的配置文件中配置片段如下:
<bean id="computer" class="cn.itcast.interview.Computer">
</bean>
<bean id="programmer" class="cn.itcast.interview.Programmer">
<property name="computer" ref="computer"></property>
</bean>
3、Spring提供了對AOP技術的良好封裝,AOP稱為面向切面編程,就是系統中有很多各不相干的類的方法,在這些眾多方法中要加入某種系統功能的代碼,例如:加入日志,加入權限判斷,加入異常處理,這種應用稱為AOP。實現AOP功能采用的是代理技術,客戶端程序不在調用目標,而調用代理類,代理類與目標類對外具有相同的方法聲明,有兩種方式可以實現相同的方法聲明,一是實現相同的接口,而是作為目標的子類在JDK中采用Proxy類產生動態代理的方式為某個接口生成實現類,如果要為某個類生成子類,則可以用CGLIB。在生成的代理類的方法中加入系統功能和調用目標類的相應方法,系統功能的代理以Advice對象進行提供,顯然要創建 出代理對象,至少需要目標類Advice類,Spring提供了這種支持,只需要在Spring配置文件中配置這兩個元素即可以實現代理和aop功能,例如,
<bean id="proxy" type="org,spring.framework.aop.ProxyBeanFactory">
<property name="target" ref=""></property>
<property name="advisor" ref=""></property>
</bean>