分享Java快乐

我有一份快乐,分给你一些;我还是有一份快乐,你也有一份快乐。

mxj ID:javamxj
510570次访问,排名74好友0人,关注者2
javamxj的文章
原创 82 篇
翻译 0 篇
转载 0 篇
评论 717 篇
javamxj的公告

    版权声明:在此发表的有关文章均属本人javamxj原创,转摘或引用请注明出处。



联系方式:
Email:
javamxj@gmail.com

友情Blog

最近评论
xkpkhu:wow power leveling
xkpkhu:wow power leveling
xkpkhu:wow power leveling
zhouxz1026:写得真是太好了,水平真的很高,佩服啊!赞一个!学习了!
蜂胶
蜂蜜
hitprince:谢谢啦,知道了
文章分类
收藏
    相册
    有空逛逛
    java开源大全(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创  快速上手Spring--11. 自动绑定和依赖检查收藏

    新一篇: 强烈推荐几个比较好的Java代码查询网站

     
       这篇文章来谈谈《Spring Framework 开发参考手册》的3.3.5小节中的“自动装配协作对象”和3.3.6 小节中的“依赖检查”。
     
      仔细看看文档,相关配置见前面文章。
     
     
       先建立一个包:javamxj.spring.basic.autowiring ,然后把以下4个文件放在这个包下。 
     
    · HelloBean,一个简单的Bean,含有一个属性hello。 
    HelloBean.java
    package javamxj.spring.basic.autowiring;

    public class HelloBean {
        private String hello;

        public String getHello() {
            return hello;
        }

        public void setHello(String hello) {
            this.hello = hello;
        }
    }
     
     
    · HelloDate类先定义了三个构造函数,然后设置了三个属性:hello、date、date2。 
    HelloDate.java
    package javamxj.spring.basic.autowiring;

    import java.util.Date;
    import java.util.GregorianCalendar;

    public class HelloDate {
     
        public HelloDate() {
            System.out.println("defalt Constructor called");
        }

        public HelloDate(HelloBean hello) {
            System.out.println("HelloDate(HelloBean) called");
        }

        public HelloDate(HelloBean hello, Date date) {
            System.out.println("HelloDate(HelloBean,Date) called");
        }

        public void setHello(HelloBean hello) {
            System.out.println("Property hello set");
        }

        public void setDate(Date date) {
            System.out.println("Property date set");
        }

        public void setDate2(GregorianCalendar date) {
            System.out.println("Property date2 set");
        }

    }
     
    · beans.xml中定义了七个bean, 

    beans.xml

    <?xml version="1.0" encoding="GBK"?> 
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>

    <bean id="date" name="myDate" class="java.util.Date"/>

    <bean id="helloBean" class="javamxj.spring.basic.autowiring.HelloBean"
    dependency-check="simple">
    <property name="hello" value="javamxj"/>
    </bean>

    <bean id="HelloByName" class="javamxj.spring.basic.autowiring.HelloDate"
    autowire="byName"/>
    <bean id="HelloByType" class="javamxj.spring.basic.autowiring.HelloDate"
    autowire="byType"/>
    <bean id="HelloConstructor" class="javamxj.spring.basic.autowiring.HelloDate"
    autowire="constructor"/>
    <bean id="HelloAutodetect" class="javamxj.spring.basic.autowiring.HelloDate"
    autowire="autodetect"/>

    <bean id="helloCheck" class="javamxj.spring.basic.autowiring.HelloDate" autowire="byType"
    dependency-check="objects">
    <property name="date2" >
    <bean class="java.util.GregorianCalendar"/>
    </property>
    <!-- <property name="date" ref="date"/>-->
    <!-- <property name="hello" ref="helloBean"/>-->
    </bean>

    </beans>
     
     
    Main.java
    package javamxj.spring.basic.autowiring;

    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.ClassPathResource;

    public class Main {
        public static void main(String[] args) {
            BeanFactory bf = new XmlBeanFactory(new ClassPathResource(
                    "javamxj/spring/basic/autowiring/beans.xml"));

            System.out.println("使用 byName:");
            HelloDate hb = (HelloDate) bf.getBean("HelloByName");

            System.out.println("\n使用 byType:");
            hb = (HelloDate) bf.getBean("HelloByType");

            System.out.println("\n使用 constructor:");
            hb = (HelloDate) bf.getBean("HelloConstructor");

            System.out.println("\n使用 autodetect:");
            hb = (HelloDate) bf.getBean("HelloAutodetect");

            System.out.println("\n使用 dependency-check:");
            hb = (HelloDate) bf.getBean("helloCheck");
        }
    }
     
     
    运行结果:
     
    使用 byName:
    defalt Constructor called
    Property date set
     
    使用 byType:
    defalt Constructor called
    Property date set
    Property hello set
     
    使用 constructor:
    HelloDate(HelloBean,Date) called
     
    使用 autodetect:
    defalt Constructor called
    Property date set
    Property hello set
     
    使用 dependency-check:
    defalt Constructor called
    Property date2 set
    Property date set
    Property hello set
     

    参考运行结果,详细说明一下beans.xml的配置:
     
    · HelloByName指定了autowire="byName",则Spring会根据bean的名称与属性名称是否符合来进行自动绑定。如这里HelloDate含有属性:hello、date、date2,在beans.xml中包含了date、helloBean两个bean,所以只有date符合要求。(bean的名称包括Id名称和name名称)
     
    · HelloByType指定了autowire="byType",这里HelloDate含有属性:hello、date、date2,在beans.xml中包含了Date类和HelloBean类,分别匹配date和hello属性。
     
    · HelloConstructor指定了autowire="constructor",它会优先调用含有较多参数的构造函数。
     
    · HelloAutodetect指定了autowire="autodetect",如果找到了一个缺省的构造函数,则会应用byType。
     
     
    · helloBean中指定了dependency-check="simple",则会对基本类型和集合进行依赖检查。这里如果不对属性hello进行赋值,就会抛出一个异常。
     
    · helloCheck中指定了dependency-check="objects",同时也指定了autowire="byType",虽然会自动绑定属性date和hello,但由于属性date2没有被自动绑定到,所以需要特别设置。
     
     
     
     
    这篇文章源代码下载(不包含库文件):http://free.ys168.com/?javamxj  Spring目录下面的SpringBasic.zip。

    发表于 @ 2005年08月19日 17:02:00|评论(loading...)|编辑

    旧一篇:  快速上手Spring--10. 任意方法的替换

    评论

    #jimmy 发表于2005-08-26 10:23:00  IP: 211.100.4.*
    非常感谢你,你的教程是spring里写得最好的,最简单易懂,希望你以后接着出类似教程。
    #皮皮 发表于2005-09-06 11:06:00  IP: 211.100.21.*
    oh,my god
    我对你的仰慕之情是如滔滔江水连绵不绝啊
    #esprit 发表于2005-10-17 14:02:00  IP: 211.100.21.*
    期待下文!!!
    谢谢!
    #poo 发表于2005-11-14 11:38:00  IP: 59.107.120.*
    seen


    签名:My Blog
    http://xiangtool.nease.net
    #BBC 发表于2006-06-07 16:41:00  IP: 219.159.77.*
    你的XML文件干嘛采取这种方式放上来,简直是不给人家看!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © javamxj