一只纯菜鸟的角度....持续更新中。一如既往,求指教,求更正。
Spring是一个容器框架是,用以配置和维护bean之间的关系。它可以作用范围很可以很跨整个web项目。在理论上咬文嚼字对于我们这些开发经验少得可怜的菜菜来说,纯属劳民伤财,还是代码来得实在。下面这个实例用spring配置两个实体类(LowerLetter和UpperLetter),让后在测试之。下面就开始我们的spring入门吧
-------------------------------------------导包
我用的是MyEclipse10.0开发,新建项目后,右键项目名--->MyEclipse--->add Spring Capibi...
这样就导好了包,系统还会自动生成spring的配置文件applicationContext.xml。
当然也可以像平常一样自己手动导包。
-------------------------------------编写代码。完整的代码和参考资料在文章结尾的连接中下载
publicinterface ChangeLetter {
publicvoid execute();
}
-------------------------------------
publicclass LowerLetter implements ChangeLetter {
private String str;
public String getStr() {
returnstr;
}
publicvoid setStr(String str) {
this.str = str;
}
publicvoid execute() {
System.out.println(this.str.toLowerCase());
}
}
----------------------------------
publicclass UpperLetter implements ChangeLetter{
private String str;
public String getStr() {
returnstr;
}
publicvoid setStr(String str) {
this.str = str;
}
publicvoid execute() {
System.out.println(this.str.toUpperCase());
}
}
--------------------------------------配置spring
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="confgUpper" class="cn.bl.service.UpperLetter">
<property name="str" value="hello world I AM GOOD man"/>
</bean>
<bean id="confgLower" class="cn.bl.service.LowerLetter">
<property name="str" value="IF U DON'T BELEIVE youselef ,who does?"/>
</bean>
</beans>
-----------------------测试之
publicclass Test {
publicstaticvoid main(String[] args) {
// ApplicationContext ac= new FileSystemXmlApplicationContext("applicationContext.xml");
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
ChangeLetter getOne= (ChangeLetter) ac.getBean("confgLower");
getOne.execute();
ChangeLetter getother=(ChangeLetter) ac.getBean("confgUpper");
getother.execute();
}
}
-----------------结果
if u don't beleive youselef ,who does?
HELLO WORLD I AM GOOD MAN
上例就是用spring,在运行期间动态地把字符串注入了ChangeLetter的实现类的str属性中
我们看到了spring的什么好处呢?(摘抄自资料,未完全理解)
首先,我们的组件并不需要实现框架指定的接口,因此可以轻松的将组件从Spring中脱离,甚
至不需要任何修改(这在基于EJB框架实现的应用中是难以想象的)。
其次,组件间的依赖关系减少,极大改善了代码的可重用性。
Spring的依赖注入机制,可以在运行期为组件配置所需资源,而无需在编写组件代码时就加以
指定,从而在相当程度上降低了组件之间的耦合。
Spring通过依赖注入模式,将依赖关系从编码中脱离出来,从而大大降低了组件之间的耦合,
实现了组件真正意义上的即插即用。这也是Spring最具价值的特性之一。
Spring对于面向接口设计的意义,在于它为面向接口编程提供了一个更加自然的平台。基于Spring开发,程序员会自然而然倾向于使用接口来定义不同层次之间的关联关系,这种自发的倾向性,来自于Spring所提供的简单舒适的依赖注入实现。Spring使得接口的定义和使用不再像传统编码过程中那么繁琐(传统编码过程中,引入一个接口,往往也意味着同时要引入一个Factory类,也许还有一个额外的配置文
件及其读写代码)。
Spring从开发者的角度对这些技术内容进行了进一步的封装和抽象,使得应用开发更为简便。在笔者的开发工作中,借助Spring提供的丰富类库,相对传统开发模式,大大节省了编码量。
通过以上的讲解相信你和我一样还是一头雾水,没关系,我们把问题记清楚,以后再解决它,继续向前走。下一站:IoC(控制反转 Inversion of Control)/DI(依赖注入 Dependency Injection)
我以为菜鸟的观点总结下:IoC和DI是同一个概念。反转就是控制权由代码转到了外部容器;注入就是组件之间的依赖关系由容器动态地注入到组件中。参考资料中有个有趣的描述通过插入USB设备从电脑拷贝资料的过程来理解依赖注入,摘录之:
在运行时(系统开机,USB 设备加载)由容器(运行在笔记本
中的Windows操作系统)将依赖关系(笔记本依赖USB设备进行数据存取)注入到组件中(Windows
文件访问组件)。
下面用代码实现依赖注入的几种常用形式