??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕综合一区,佐山爱痴汉视频一区二区三区,国产成人精品亚洲日本在线观看http://www.aygfsteel.com/terry711/category/20615.htmlzh-cnWed, 02 Apr 2008 04:18:42 GMTWed, 02 Apr 2008 04:18:42 GMT60?Spring提供的Hibernatex式事务管理有两种办法 http://www.aygfsteel.com/terry711/articles/190168.htmlterryliuterryliuTue, 01 Apr 2008 09:49:00 GMThttp://www.aygfsteel.com/terry711/articles/190168.htmlhttp://www.aygfsteel.com/terry711/comments/190168.htmlhttp://www.aygfsteel.com/terry711/articles/190168.html#Feedback0http://www.aygfsteel.com/terry711/comments/commentRss/190168.htmlhttp://www.aygfsteel.com/terry711/services/trackbacks/190168.htmlSpring提供的Hibernatex式事务管理有两种办法

a) 配合使用org.springframework.transaction.interceptor.TransactionInterceptor和org.springframework.orm.hibernate.HibernateTransactionManagerQ下面是spring reference的例?

代码:
<beans>
        ...
        <bean id="myTransactionManager"
            class="org.springframework.orm.hibernate.HibernateTransactionManager">
            <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
            </property>
        </bean>
        <bean id="myTransactionInterceptor"
                class="org.springframework.transaction.interceptor.TransactionInterceptor">
            <property name="transactionManager">
                <ref bean="myTransactionManager"/>
            </property>
            <property name="transactionAttributeSource">
                <value>
                    product.ProductService.increasePrice*=PROPAGATION_REQUIRED
                    product.ProductService.someOtherBusinessMethod=PROPAGATION_MANDATORY
                </value>
            </property>
        </bean>
        <bean id="myProductServiceTarget" class="product.ProductServiceImpl">
            <property name="productDao">
                <ref bean="myProductDao"/>
            </property>
        </bean>
        <bean id="myProductService" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="proxyInterfaces">
                <value>product.ProductService</value>
            </property>
            <property name="target">
                <ref local="myProductServiceTarget<"/>
            </property>
            <property name="interceptorNames">
                <list>
                <value>myTransactionInterceptor</value>
                </list>
            </property>
        </bean>
    </beans>


HibernateInterceptor和事务无养I它的用途在javadocs中描q如下:
引用:
This interceptor binds a new Hibernate Session to the thread before a method
call, closing and removing it afterwards in case of any method outcome.
If there already was a pre-bound Session (e.g. from HibernateTransactionManager,
or from a surrounding Hibernate-intercepted method), the interceptor simply
takes part in it.


b)使用TransactionProxyFactoryBeanQ下面是Spring Reference中的例子
代码:

    <beans>
        ...
        <bean id="myTransactionManager"
            class="org.springframework.orm.hibernate.HibernateTransactionManager">
            <property name="sessionFactory">
                <ref bean="mySessionFactory"/>
            </property>
        </bean>
        <bean id="myProductServiceTarget" class="product.ProductServiceImpl">
            <property name="productDao">
                <ref bean="myProductDao"/>
            </property>
        </bean>
        <bean id="myProductService"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager">
                <ref bean="myTransactionManager"/>
            </property>
            <property name="target">
                <ref bean="myProductServiceTarget"/>
            </property>
            <property name="transactionAttributes">
                <props>
                    <prop key="increasePrice*">PROPAGATION_REQUIRED</prop>
                    <prop key="someOtherBusinessMethod">PROPAGATION_MANDATORY</prop>
                </props>
            </property>
        </bean>
    </beans>
   


在没有其他AOP interceptor情况下,使用TransactionProxyFactoryBean是比较方便的?
事务划分一般是的业务层Q而不是在DAO一层?

2.代理工厂q回的是接口AddressDao的应用,通过接口最l调用target的方法?
3.TransactionDefinition定义了所有的事务属?/span>


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=396860



terryliu 2008-04-01 17:49 发表评论
]]>
?Spring+Hibernate配置事务 http://www.aygfsteel.com/terry711/articles/190159.htmlterryliuterryliuTue, 01 Apr 2008 09:36:00 GMThttp://www.aygfsteel.com/terry711/articles/190159.htmlhttp://www.aygfsteel.com/terry711/comments/190159.htmlhttp://www.aygfsteel.com/terry711/articles/190159.html#Feedback0http://www.aygfsteel.com/terry711/comments/commentRss/190159.htmlhttp://www.aygfsteel.com/terry711/services/trackbacks/190159.html阅读全文

terryliu 2008-04-01 17:36 发表评论
]]>
Spring中bean的基本xml配置http://www.aygfsteel.com/terry711/articles/103640.htmlterryliuterryliuTue, 13 Mar 2007 14:14:00 GMThttp://www.aygfsteel.com/terry711/articles/103640.htmlhttp://www.aygfsteel.com/terry711/comments/103640.htmlhttp://www.aygfsteel.com/terry711/articles/103640.html#Feedback0http://www.aygfsteel.com/terry711/comments/commentRss/103640.htmlhttp://www.aygfsteel.com/terry711/services/trackbacks/103640.html    理论上,bean装配可以从Q何资源获得,包括属性文Ӟ关系数据库等Q但xml是最常见的spring 应用pȝ配置源。Spring中的几种容器都支持用xml装配beanQ包括:
    XmlBeanFactory Q?br />    ClassPathXmlApplicationContext Q?br />    FileSystemXmlApplicationContext Q?br />    XmlWebApplicationContext

    基本的xml配置包括如下几个斚wQ?br />   
    1Q添加一个bean
    2Q设|bean的属?br />        2.1 手动讄
            2.1.1 通过SetterҎ
            2.1.2 通过构造器
        2.2 自动讄
    其中bean的属性即为bean里的成员变量Q这些成员变量值的获得可以通过setterҎQ例如某个属性ؓname,则setterҎ为setName(String name)Q或者通过构造器在类被实例化时初始化。SetterҎ(例如setNameҎ)或者构造器的调用都可以通过在xml文g里进行配|,从而实现让spring容器来自动进行?br />
1Q添加一个bean
    以下是一个例子:
    <bean
        id = “mybean?br />        Class = “blog.spring.MyBean?br />        Singleton = “false?br />        init-method = “initMethod?br />        destroy-method = “destroyMethod?br />        autowire = “autowire type?br />    />
    下面是对该标{N各个属性的解释Q?br />    Id : 标识该bean的名Uͼ通过factory.getBean(“id?来获得实例?br />    Class : 该bean的类路径?br />    Singleton : 默认为trueQ即单实例模式,每次getBean(“id?时获取的都是?br />一个实例,如果讄为falseQ即原型模式Q则每次获取的是新创?br />的实例?br />    Init-method : 在bean实例化后要调用的Ҏ(bean里定义好的方??br />    Destroy-method : bean从容器里删除之前要调用的Ҏ?br />    Autowire : 其属性要通过何种Ҏq行属性的自动装配?br />    对于上述的各个属性,id和class是必要的Q其他的则可以省略。例如如果设|了autowire的|则表明需要自动装配,否则是手动装配?br />
2Q通过SetterҎ手动讄bean里的属?br />    Bean里的属性通过<property>标签来标识。有以下几种情况Q?br />    ?单类型属?br />        <bean id = “mybean?class = “blog.spring.MyBean?gt;
            <property name = “name?gt;
                <value>springTest</value>
            </property>
        </bean>
    ?引用其他bean
        <bean id = “mybean?class = “blog.spring.MyBean?/>
        <bean id = “mybean1?class = “blog.spring.MyBean1?gt;
            <property name = “name?gt;
                <ref bean = “mybean?/>
            </property>
        </bean>
也可以将<ref>改ؓ
    <bean class = ?.?gt;
q样叫做内部beanQ缺Ҏ无法在其他地斚w用这个bean的实例?br />    ?装配集合
        共有以下几种集合的装配:
    ****装配List和数l?***
        <property name = ”nameList?gt;
            <list>
                <value>something</value>
                <ref bean = “blog.spring.MyBean?/>
                <value>otherThing</value>
            </list>
        </property>
    ****装配Set****
        <property name = ”nameList?gt;
            <set>
                <value>something</value>
                <ref bean = “blog.spring.MyBean?/>
                <value>otherThing</value>
            </set>
        </property>
    ****装配Map****
        <property name = ”nameList?gt;
            <map>
                <entry key = “key1?gt;
                    <value>value1</value>
                </entry>
                <entry key = “key2?gt;
                    <ref bean = “mybean?/>
                </entry>
            </map>
        </property>
    ****装配Properties****
        <property name = ”nameList?gt;
            <props>
                <prop key = “prop1?gt;value1</prop>
                <prop key = “prop2?gt;value2</prop>
            </props>
        </property>
    ?讄null
        要将一个属性nullQ需要通过<null />标签Q如果不讄Q则属性ؓ默认?在实例化?而不是null?br />        <property name=”name?gt; <null /> </property>

3Q通过构造器手动讄bean里的属?br />    假设有如下一个beanQ?br />    Public class MyBean {
        Public MyBean( String arg1, MyBean1 arg2, String arg3 )
    }
则可以在xml里这样配|该beanQ?br /><bean id = “mybean?class = “blog.spring.MyBean?gt;
        <constructor-arg index = ??gt;
            <value>springTest</value>
        <constructor-arg>
        <constructor-arg index = ??gt;
            <ref bean = “mybean1?/>
        <constructor-arg>
</bean>
其中的index是用来标识该参数在构造函数里的位|的Qƈ?开始?br />
4Q让spring完成自动装配
    例如Q?br /><bean
id = “mybean?
class = “blog.spring.MyBean?br />autowire = “autowire type?br />/>
下面是几Uautowire type的说明:
?byname : 试图在容器中L和需要自动装配的属性名相同的bean或idQ如果没有找到相应的beanQ则q个属性未被装配上?br />?byType : 试图在容器中L一个与需要自动装配的属性类型相同的bean或idQ如果没有找刎ͼ则该属性未被装配上?br />?constructor : 试图在容器中L与需要自动装配的bean的构造函数参C致的一个或多个beanQ如果没扑ֈ则抛出异常?br />?autodetect : 首先试使用constructor来自动装配,然后再用byType方式?br />从上面可以看出,如果某个bean不手动设|autowire属性,则默认ؓ手动装配。如果需要将所有bean都设|ؓ自动装配Ӟ可以通过?lt;beans>标签中设|default-autowire属性?lt;beans>标签是整个xml文档的根Q在它下面就是一个个?lt;bean>?br />其中default-autowire的g有byNameQbyTypeQconstructorQautodetect四种?br />例如配置如下Q?br /><beans default-autowire = “byName?gt;
    ...
</beans>

    自动装配可能带来不确定性问题。例如用byType时可能同时发C个相同的cdQ则不知道该采用哪一个。所以可能؜合采用自动和手动装配。例如,Ҏ个bean讄动装配,而对其某个属性则手动明确的设|其|例如Q?br /><bean id = “mybean?class = “blog.spring.MyBean?br />    Autowire = “byType?br />>
    <property name = “name?gt;
        <ref bean = “myBean1?gt;
    </property>
</bean>
通过q样的配|,对mybean里的name属性进行手动装配,而对除name外的其他属性就q行自动装配?br />

terryliu 2007-03-13 22:14 发表评论
]]>
Spring控制反{(IoC)的理?/title><link>http://www.aygfsteel.com/terry711/articles/103639.html</link><dc:creator>terryliu</dc:creator><author>terryliu</author><pubDate>Tue, 13 Mar 2007 14:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/terry711/articles/103639.html</guid><wfw:comment>http://www.aygfsteel.com/terry711/comments/103639.html</wfw:comment><comments>http://www.aygfsteel.com/terry711/articles/103639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/terry711/comments/commentRss/103639.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/terry711/services/trackbacks/103639.html</trackback:ping><description><![CDATA[Spring框架的核心就是控制反?Inversion of Control)和依赖注?Dependency Injection)Q通过q两斚w来实现松耦合?br /><br />    使用IoCQ对象是被动的接受依赖类Q而不是自׃动的L。容器在实例化的时候主动将它的依赖cL入给它。可以这L解:控制反{类的主动权转移到接口上Q依赖注入通过xml配置文g在类实例化时其依赖cL入。通过下面的实例来逐步的理解:<br /><br /><br />    首先假设有一个需求,cBusiness需要调用类Dependency的方法f()Q按照日常的做法Q得C面的代码Q?br />//**cDependency**<br />public class Dependency {<br />    public void f() {};<br />}<br />//**cBusiness**<br />public  class Business {<br />    Dependency d;<br />    public Business() {<br />    d = new Dependency();<br />    }<br />    public void doSth() {<br />        d.f();<br />    }<br />}<br /><br /><br />    对上q实现做出如下修改:<br />    首先Q将Business里的Dependency实例的获得该为setter方式Q其ơ,DependencycL为某个接口的实现。故可以得到下面新的代码Q?br />//**接口IDependency**<br />public inte***ce IDependency {<br />    void f();<br />}<br />//**cDependency**<br />public class Dependency {<br />    public void f() {};<br />}<br />//**cBusiness**<br />public  class Business {<br />    IDependency d;<br />    public Business() {}<br />    public void doSth() {<br />     d.f();<br />    }<br />    public void setDependency(IDependency d) {<br />        this.d = d;<br />    }<br />}<br /><br /><br />    在新的代码中Q首先Business的变量d可以接收MIDependency的实例,另外QDependency的实例不是通过Business来获得,而是通过setter(也可以用构造器)来由外部传给它。这g跟我们往常的代码没什么不同,但这已经是一个良好的设计。关键就是Dependency的实例如何从外部注入lBusiness呢?<br />q就要通过xml来实C?br /><br />    创徏一个SpringFirst.xmlQ进行简单的配置Q?br /><beans><br />    <bean id = "dependency" class = "aopfirst.business.Dependency" /><br />    <bean<br />        id = "business"<br />        class = "aopfirst.business.Business"<br />    ><br />        <property name = "dependency"><br />            <ref bean = "dependency" /><br />        </property><br />    </bean><br /></beans><br />    q个配置文g里将DependencycdBusinesscd入,q将Dependency作ؓBusiness的一个参数?br /><br /><br />    单有了这个xml文gq不够,q需要一个测试类来加载该xml文gQspring提供了现成的APIQ在加蝲上面的xml的时候,p行了如下工作Q实例化Dependencyc,实例化Businessc,q将Dependency的实例作为参数赋l了Business实例?br />setDependency()Ҏ。下面是该测试程序:<br /><br /><br />public class StartServer {<br />    public static void main(String [] args) {<br />     ClassPathResource cr = new ClassPathResource("SpringFirst.xml");<br />     BeanFactory factory = new XmlBeanFactory(cr);<br />     Business b = (Business)factory.getBean("business");<br />     b.doSth();<br />    }<br />}<br /><br /><br />    上面的程序加载了xml以后Q获得id?business"的beanQ即Businesscȝ实例Qƈ调用了其doSth()Ҏ。由此可见,Business的依赖类Dependency是通过xml来注入的Q而且Business是通过接口IDependency来接收Dependency实例。因此,当我们又有新的IDependency的实现时Q只需要修改xml文g卛_Q测试程序只需要根据xml里的id值来获得需要的参数?br /><br />    ȝ上面的例子,Ҏ制反转和依赖注入已经能理解了。依赖类(Dependency)是通过外部(xml)来注入的Q而不是由使用它的c?Business)来自己制造,q就是依赖的注入。另一斚wQBusiness对类Dependency的依赖{UdҎ口IDependency的依赖,控制权由c{Ud了接口,即由"实现"转移?抽象"中。这是控制反{?br /><img src ="http://www.aygfsteel.com/terry711/aggbug/103639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/terry711/" target="_blank">terryliu</a> 2007-03-13 22:13 <a href="http://www.aygfsteel.com/terry711/articles/103639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ͼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƽ</a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank">̳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">з</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԣ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">۶</a>| <a href="http://" target="_blank">ף</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank">ǰ</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">ߴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">dz</a>| <a href="http://" target="_blank">˾</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³ľ</a>| <a href="http://" target="_blank">ֹ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>