spring是用注解好还是用xml更好一些?

上帝爱众生 发布于 2015/05/19 13:17
阅读 1K+
收藏 0
最近学习了一下java的工厂设计模式,感觉工厂模式最大的优点和spring的IOC有些相像,比如我们为一个User接口写了多个实现,记为:UserImpl1、UserImpl2,可以很轻松的来回切换实现,对于工厂模式,要想将原来返回UserImpl1的实现变为UserImpl2的实现只要将返回对象的函数返回值变为new UserImpl2()即可,这样以前代码不用变,只需要变工厂类里的函数即可,那么换句话说spring的IOC也一样,只需要将注解换个位置即可,不过上次查了一下,有人说IOC之所以会优于工厂模式是因为它允许在xml文件中支配实现类,这样就可以在不用重启jvm的情况下直接修改xml就行了,可是如果使用工厂模式就得再重启jvm重新编译一次源代码了,所以如果说用注解的话也是如此吧,毕竟注解也是通过修改源码才能进行换实现,这样一来spring的注解岂不是和工厂模式没有两样了吗?学到这里感到非常迷惑,求大神们指教啊!
加载中
0
ooooooooosc
ooooooooosc
    两者其实都一样,注解写起来方便,以后需求更改或维护可能麻烦点,XML就相反
0
奶丶空瓶
奶丶空瓶
注解你写代码直接写就好   xml要不断的切换,我感觉各有利弊,习惯而已,我比较习惯xml       个人理解是这样的 毕竟我是菜鸟
0
Moses_Fu
Moses_Fu

即使是XML配置Spring,也只是在第一次启动的时候进行读取配置,所以应该不存在“不用重启jvm的情况下直接修改xml就行了”的情况。

Spring的IoC算是优化后的“工厂模式”,更方便的使用和解耦。

上帝爱众生
上帝爱众生
学习了~~谢谢~
0
王伟1124
<bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">  <constructor-arg>  <list>  <bean class="java.net.InetSocketAddress">  <constructor-arg value="172.19.65.19"/>  <constructor-arg value="11211"/>  </bean>  </list>  </constructor-arg>  <property name="connectionPoolSize" value="${memcached.server.poolSize}"/>  <property name="commandFactory">  <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"/>  </property>  <property name="transcoder">  <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder"/>  </property> </bean>  <bean id="memcachedClient" factory-bean="memcachedClientBuilder" factory-method="build" destroy-method="shutdown"/>  <bean id="memcacheManager" class="com.qianmi.eposapi.domain.MemcacheManager">  <property name="memcachedClient" ref="memcachedClient"></property> </bean>
这个怎么改成注解的方式?
0
王伟1124
<bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
        <constructor-arg>
            <list>
                <bean class="java.net.InetSocketAddress">
                    <constructor-arg value="172.19.65.19"/>
                    <constructor-arg value="11211"/>
                </bean>
            </list>
        </constructor-arg>
        <property name="connectionPoolSize" value="${memcached.server.poolSize}"/>
        <property name="commandFactory">
            <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"/>
        </property>
        <property name="transcoder">
            <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder"/>
        </property>
    </bean>
返回顶部
顶部