美丽涵涵童装店--说我博客名字,给你们打折!
随笔 - 82  文章 - 266  trackbacks - 0
<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456


点击这里给杨爱友发消息
美丽涵涵童装店
说我博客名字,给你们打折!

常用链接

留言簿(6)

随笔分类

随笔档案

文章档案

好友的BLOG

搜索

  •  

最新评论

阅读排行榜

评论排行榜

                                                            第一章 概论
1. 关于轻量重量级的解释
    夏昕说:现在的轻量级和重量级的确很难区分了,没有一个明确的衡量标准,之前有人说,有classloader的算是重量级;也有人说,超过3MB的算是重量级,spring core算是轻量级的,但是加上期于的部件,估计就得列入重量记的范畴了。
林信良说:用了spring并不等于轻量级开发。重点是您有没有采纳其精神,用了IOC就轻量级了吗?不见得。什么都来不DI,我看也是很沉重的;如果你在设计时善用IoC,即使不用spring也是轻量级。不要为了spring而spring。
2. IoC的理解
   Don't call me,I will call you!程序不依赖于实现,而是依赖与抽象接口。在设计业务类时,我们设计为它依赖于某抽象接口,具体的需要哪个实现类是由配置文件来帮我们注入的。这就是面向接口编程的思想,当业务需求发生变动时,我们只需修改其实现类的具体实现,而接口并没有改变,所以低层业务代码不做任何改动,既增加了代码的复用率,也是功能接口变得清晰。Don't call me,you should call my interface!
3. DI 依赖注入的理解
    保留抽象接口,让组件依赖抽象接口,当组件要与其他实际的对象发生依赖关系时,由抽象接口来注入依赖的实际对象。依赖注入,注入你所依赖的实现类,由spring容器帮你注入适合的实现类,而不是你自己去创建bean实例。有3种基本实现方式:Interface injection、Setter injection与Constructor injection。
4. 应用程序中获取bean

1     <bean id="helloBean" class="chapter2.HelloBean">
2         <property name="helloWord">
3             <value>Hello yangay!</value>
4         </property>
5     </bean>

    public static void main(String[] args) {
        Resource rs 
= new ClassPathResource("applicationContext.xml");//从classpath下加载配置信息
        BeanFactory factory = new XmlBeanFactory(rs);//基于xml格式配置文件的实例化方式,得到一个BeanFactory
        HelloBean hello = (HelloBean)factory.getBean("helloBean");//获取id="helloBean"的bean,此时可以调用bean里定义的所有方法
        System.out.println(hello.getHelloWord());
    }
   
    这是通过beanFactory管理Bean的方式,BeanFactory负责读取Bean定义文件;管理对象的加载、生成;维护Bean对象之间的依赖关系;负责Bean的生命周期,对于简单的应用程序来说,使用BeanFactory就已经足够来管理Bean了。BeanFactory接口提供了六个方法管理Bean。
另外还可以通过ApplicationContext来获取Bean对象:

1 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//从classpath下加载配置信息
2 HelloBean hello = (HelloBean)ctx.getBean("helloBean");//获取id="helloBean"的bean,此时可以调用bean里定义的所有方法

                            第二章 spring IoC、AOP实例及分析
1. IoC实例一
    控制反转用得最多的是为业务类注入Bean对象,典型的应用是在结合struts开发是,为struts的action类来注入springDao,这样在业务层如action类中不再介入spring API,但同时又可以利用spring提供的所有便捷功能。低层实现细节发生的变化,对业务层来说是透明的,不但降低了程序的偶合性,而且也提高了DAO对象的重用性。在这个例子中,为了简单起见,我们只为HelloBean注入了一个字符串,而不是注入实体Bean。但这只体现出了控制反转的特点,对于依赖注入DI并没有得到明显的体现。
1)首先编写一个简单的JAVABEAN
1 public class HelloBean {
2     private String helloWord;

3     public String getHelloWord() {
4         return helloWord;
5     }
6     public void setHelloWord(String helloWord) {
7         this.helloWord = helloWord;
8     }
9 }
2)接下来编写 Bean定义文件,定义文件告诉spring如何完成以来关系的注入等动作。我们这里命名文件为applicationContext.xml,定义文件中省略了xml文件的头
1     <bean id="helloBean" class="chapter2.HelloBean">//应用程序中用于取得bean的标志
2         <property name="helloWord">//设置了bean中setter的名称
3             <value>Hello yangay!</value>//设置了将要注入的值
4         </property>
5     </bean>

3)最后编写一个简单的示范程序
1 public class SpringDemo {
2 
3     public static void main(String[] args) {
4         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
5         HelloBean hello = (HelloBean)ctx.getBean("helloBean");//获取id="helloBean"的bean,此时可以调用bean里定义的所有方法
6         System.out.println(hello.getHelloWord());
7     }
8 }
运行之,将会看到在bean定义文件中为"helloWord"设置的值"Hello yangay!"被打印出来。
--------------------
2. 1. IoC实例二
    其实spring IoC的初衷就是降低程序的偶合性,使开发者面向接口编程,使业务层设计不以来于实现,具体依赖与哪个bean是在speing培植文件中来定义的。同样在这里写一个示范程序,包括一个接口,两个实现类,一与业务有关的Business类,Business类依赖的是接口,而不是接口的实现,具体需要哪个实现是由spring容器来实现注入的。
1)接口
只声明了一个保存的方法
1 public interface IDeviceWriter {
2     void svaeToDevice();
3 }
2)第一个实现IDeviceWriter接口的类,存储到软盘
1 public class FloppyWriter implements IDeviceWriter{
2 
3     public void svaeToDevice() {
4         System.out.println("存储至软盘");
5     }
6 }
3)第二个实现IDeviceWriter接口的类,存储到硬盘
1 
2 public class DiskWriter implements IDeviceWriter{
3 
4     public void svaeToDevice() {
5         System.out.println("存储至硬盘");
6     }
7 }

4)业务类,依赖于抽象的IDviceWriter接口,要 存储到磁盘还是软盘是由spring配置文件来决定的
 1 public class Business {
 2 
 3     private IDeviceWriter writer;
 4     public void save(){
 5         writer.svaeToDevice();
 6     }
 7 
 8     public IDeviceWriter getWriter() {
 9         return writer;
10     }
11     public void setWriter(IDeviceWriter writer) {
12         this.writer = writer;
13     }
14 }
5)bean的定义文件
1     <bean id="floppyWriter" class="chapter2.FloppyWriter"/>
2     <bean id="diskWriter" class="chapter2.FloppyWriter"/>
3     <bean id="business" class="chapter2.Business">
4         <property name="writer">
5             <ref bean="floppyWriter"/>
6         </property>
7     </bean>
    将id为writer的bean注入到business Bean中,在Business对象中可以调用FloppyWriter的所有方法,实现了将数据保存至软盘的功能。

6)测试类
1 public class SpringDemo2 {
2 
3     public static void main(String[] args) {
4         Resource rs = new ClassPathResource("applicationContext.xml");
5         BeanFactory factory = new XmlBeanFactory(rs);
6         Business business = (Business) factory.getBean("business");
7         business.save();
8     }
9 }

    现在如果我们想要把数据保存到硬盘,而不是软盘了,我们只需要修改bean的配置文件,让业务类Business依赖于diskWriter既可,Business不做任何的修改。这也是面向接口编程的好处所在。



posted on 2007-09-04 00:22 杨爱友 阅读(1377) 评论(6)  编辑  收藏 所属分类: java相关技术

FeedBack:
# re: spring2.0使用手册学习笔记(一) 2007-09-04 17:25 千山鸟飞绝
我怎么没看得出2.0的东西来,这些只是spring一直以来就有的东东。
建议Lz取标题实在一点。  回复  更多评论
  
# re: spring2.0使用手册学习笔记(一) 2007-09-04 17:37 杨爱友
@千山鸟飞绝
也许吧,我本意也不是只记录2.0的新东西。我对spring了解不多,不过这些确实是我看过spring2.0后写的,当然应该大部分内容还是1.0就有的吧。  回复  更多评论
  
# re: spring2.0使用手册学习笔记(一) 2007-09-04 20:44 BeanSoft
呵呵, 2.0 加了不少的垃圾功能, 一下子变得不轻量了. 就跟 Struts 一样, 最核心的东西出现在 1.0 之前, 之后的好多就有点鸡肋了.  回复  更多评论
  
# re: spring2.0使用手册学习笔记(一) 2007-09-05 13:37 Lingo
比如呢?哪些垃圾功能?  回复  更多评论
  
# re: spring2.0使用手册学习笔记(一) 2007-09-06 09:09 hello
写得很不错,支持,希望你不断进步!!  回复  更多评论
  
# re: spring2.0使用手册学习笔记(一) 2007-09-06 12:49 杨爱友
@hello
谢谢,一定,我会的。再引用下朋友的话,“只要你保持学习的热情与动力,把握好方向,必然会取得长足的进步”,贵在坚持!
should you know me ?
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
美丽涵涵童装店
亲,说我博客名字,给你们打折!