在学习J2ee的第一个框架就是Sping,总结一下这些天学的吧。
Spring 的核心: Ioc(控制反转) Dl(依赖注入)
解决的问题:处理类和类之间的关系当在某一个类里面需要其他类的时候不需要实例化,只需要调用上下文的实例对象。
为什么要用Spring框架:
降低软件系统中对象之间的耦合,对象A和对象B之间有关联,对象B又和对象C有依赖关系,这样对象和对象之间有着复杂的依赖关系
这样通过控制反转使得对象之间并无直接联系,方便处理逻辑。
使用Spring的好处:
1.即把各个对象类封装之后,通过IoC容器来关联这些对象类。这样对象与对象之间就通过IoC容器进行联系,但对象与对象之间并没有什么直接联系。这实际上是一种解耦,开发者只负责自己的逻辑部分,很方便进行单元测试
2.可复用性好
3.IoC生成对象的方式转为外置方式,也就是把对象生成放在配置文件里进行定义,这样,当我们更换一个实现子类将会变得很简单,只要修改配置文件就可以了,完全具有热插拨的特性。
三,Spring 的基本使用
要理解sping实际上就要懂得单列模式和工厂模式
在Spring,bean可以“访问”对方通过bean配置文件指定相同或不同的引用。
在Spring框架中,依赖注入(DI)的设计模式是用来定义对象彼此间的依赖。它主要有两种类型:
- Setter方法注入
-
构造器注入
1. Setter方法注入
这是最流行最简单的DI注入方法,通过设置方法注入依赖。
示例
帮助器类和指定的setter方法
package com.yiibai.output;
import com.yiibai.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
public void setOutputGenerator(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
一个 bean 配置文件用来声明bean 和通过 setter 设置注入(property标签)的依赖。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="OutputHelper" class="com.yiibai.output.OutputHelper">
<property name="outputGenerator">
<ref bean="CsvOutputGenerator" />
</property>
</bean>
<bean id="CsvOutputGenerator" class="com.yiibai.output.impl.CsvOutputGenerator" />
<bean id="JsonOutputGenerator" class="com.yiibai.output.impl.JsonOutputGenerator" />
</beans>
只需注入一个“CsvOutputGenerator” bean 到 “OutputHelper”对象,通过一个 setter 方法(setOutputGenerator)。
2.构造函数注入
此DI方法将通过构造函数注入依赖。
示例
一个辅助类的构造函数。
package com.yiibai.output;
import com.yiibai.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
OutputHelper(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
bean 配置文件来声明bean并通过构造函数(constructor-arg标签)设置注入依赖。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="OutputHelper" class="com.yiibai.output.OutputHelper">
<constructor-arg>
<bean class="com.yiibai.output.impl.CsvOutputGenerator" />
</constructor-arg>
</bean>
<bean id="CsvOutputGenerator" class="com.yiibai.output.impl.CsvOutputGenerator" />
<bean id="JsonOutputGenerator" class="com.yiibai.output.impl.JsonOutputGenerator" />
</beans>
只需通过一个构造函数注入一个 “CsvOutputGenerator” Bean 到 “OutputHelper” 对象。
setter方法还是构造函数注入?
Spring框架的设置有没有硬性规定,只需要使用适合你的项目需要的类型注入。然而,由于setter方法注入简单,它总是大部分使用场景的选择。