??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品69,欧美78videosex性欧美,中文字幕日韩欧美精品高清在线http://www.aygfsteel.com/agun/archive/2010/12/04/339788.htmlagunagunSat, 04 Dec 2010 03:52:00 GMThttp://www.aygfsteel.com/agun/archive/2010/12/04/339788.htmlhttp://www.aygfsteel.com/agun/comments/339788.htmlhttp://www.aygfsteel.com/agun/archive/2010/12/04/339788.html#Feedback0http://www.aygfsteel.com/agun/comments/commentRss/339788.htmlhttp://www.aygfsteel.com/agun/services/trackbacks/339788.html1Q?Spring bean 定义

spring bean 定义可能包含大量的配|信息,包括容器相关的信息(比如初始化方法,静态工厂方?/p>

{)、构造函数参数、属性等。如果两个bean之间的配|信息大同小异,可采用bean的承来减少?/p>

复配|工作。子bean定义可以从父bean定义l承部分配置。它也可覆盖一些配|,或者添加一些配|?/p>

。用扉K|可以节省很多输入工作,实际上就是一U模板Ş式?/p>

spring中事务配|中有q样例子Qؓ了用事务只要父配置了事务代理就可以了,所有需要事务的

bean只要l承父就可以了。说到这个就在多说几句,父bean通常不需要实例化的,而仅仅作为子bean

定的的模板用;而ApplicationContext默认预初始化所有的singleton bean。ؓ了阻止父bean被预

初始化,可以使用abstract属性设|父bean为抽象bean。容器会忽略所有的抽象bean定义Q预初始?/span>

时不初始化抽象bean?/p>

 

2Q?spring 事务理

传统的J2EE开发者对事务理可能采用两种{略

Q?Q,全局事务Q全局事务通常由应用服务器理Q用JTA。全局事务可跨多个事务性的资源Q保?/p>

在多个事务性资源间跨越时资源一致性?br /> Q?Q,局部事?/span>Q局部事务和特定资源相关Q如Q一个和JDBC链接兌的事务。该事务能保证对该

JDBCq接数据库的一致性,对局部事务,应用服务器不需要参与事务管理,不能保证跨越多个资源?/p>

事务正确性?/p>

 

3Q编E式事务

Spring 提供两种~程式的事务理

 

Q?Q用TransactionTemplate事务理

Q?Q直接用一个PlatformTransactionManager实现cȝ理事务?/p>

 

两种~程式的事务都不需要与特定的事务API耦合Q第一U更W合Spring模板式的~程模型Q因此通常推荐采用W一U方式,W二U非常类gJTA的UserTransaction的API~程Q区别是减少了异常处理?/p>

 

 

 

4Q声明式事务

Spring的声明式事务是通过面向切面QAOPQ实现?/p>

Q?Q用声明式事务理

通常Q通过TransactionPoxyFactoryBean为目标Bean生成Spring事务代理。当bean实例的方法需要事务管理时Q采用TransactionPoxyFactoryBean来自目标bean生成事务代理?span style="color: #ff0000">每个TransactionPoxyFactoryBeanZ个具体的目标bean生成代理对象Q代理对象的Ҏ改写了目标bean的方法,是在目标bean的方法执行之前加入开始事务,在目标beanҎl束之后提交事务Q遇到指定异常回滚事?/span>?/p>

 

    定义事务代理bean模板

Xml代码 复制代码
  1. <bean id="txProxyTemplate" abstract="true"  
  2.     class="<SPAN style="COLOR: #ff0000">org.springframework.transaction.interceptor.TransactionProxyFactoryBean</SPAN>">  
  3.     <property name="transactionManager">  
  4.         <ref bean="transactionManager" />  
  5.     </property>  
  6.     <property name="transactionAttributes">  
  7.         <props>  
  8.             <prop key="trans_*">PROPAGATION_REQUIRED</prop>  
  9.             <prop key="query*">  
  10.                 PROPAGATION_REQUIRED,readOnly,-Exception   
  11.             </prop>  
  12.             <prop key="find*">  
  13.                 PROPAGATION_REQUIRED,readOnly,-Exception   
  14.             </prop>  
  15.             <prop key="load*">  
  16.                 PROPAGATION_REQUIRED,readOnly,-Exception   
  17.             </prop>  
  18.             <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>  
  19.         </props>  
  20.     </property>  
  21. </bean>  

 

 

Q?Q根据BeanName自动创徏事务代理

如果同一个应用中有很多目标bean需要生成事务代理,当然可以为每个目标bean额外配置一个TransactionPoxyFactoryBean bean.q样做的~点是,配置文g相当臃肿而且难以l护Q此时可以考虑使用自动事务代理。自动事务代理的思\是,当ApplicationContext初始化完成后Q由上下文中的某个bean"后处?每个目标beanQؓq些目标bean生成事务代理?/p>

能ؓ目标bean执行"后处?的bean必须实现BeanFactoryPostProcessor接口QApplicationContext完成初始化后Q会自动初始化所有实现BeanFactoryPostProcessor接口的beanQƈ且让?span style="color: #ff0000">“后处?#8221;其他bean.Spring提供BeanFactoryPostProcessor的实现类BeanNameAutoPoxyCreatorQ?span style="color: #ff0000">BeanNameAutoPoxyCreator可以用来处理ApplicationContext中其他beanQ方法是通过名称来识别,q且把他们用事务代理包装h?span style="color: #ff0000">BeanNameAutoPoxyCreator生成的事务代理,和用TransactionPoxyFactoryBean生成的事务代理基本一致?/p>

 

    定义事务拦截bean

Xml代码 复制代码
  1.  <bean id="transactionInterceptor"  
  2.   class="<SPAN style="COLOR: #ff0000">org.springframework.transaction.interceptor.TransactionInterceptor</SPAN>">  
  3.   <property name="transactionManager" ref="TransactionManager" />  
  4.      
  5.   <property name="transactionAttributes">  
  6.    <props>  
  7.     <prop key="create*">  
  8.      PROPAGATION_REQUIRED,-Exception   
  9.     </prop>  
  10.     <prop key="delete*">  
  11.      PROPAGATION_REQUIRED,-Exception   
  12.     </prop>    
  13.     <prop key="update*">  
  14.      PROPAGATION_REQUIRED,-Exception   
  15.     </prop>           
  16.     <prop key="get*">PROPAGATION_REQUIRED</prop>  
  17.    </props>  
  18.   </property>  
  19.  </bean>  
Xml代码 复制代码
  1.  <bean  
  2.   class="<SPAN style="COLOR: #ff0000">org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator</SPAN>">  
  3.   <property name="beanNames">  
  4.    <value>*Service</value>  
  5.   </property>  
  6.   <property name="interceptorNames">  
  7.    <list>  
  8.     <value>transactionInterceptor</value>  
  9.    </list>  
  10.   </property>  
  11.  </bean>   

 

ơ配|关键在两个bean

TransactionInterceptor

BeanNameAutoProxyCreator

 

Q?Q基于注释式事务代理配置



agun 2010-12-04 11:52 发表评论
]]>
spring 常识1http://www.aygfsteel.com/agun/archive/2010/12/04/339787.htmlagunagunSat, 04 Dec 2010 03:50:00 GMThttp://www.aygfsteel.com/agun/archive/2010/12/04/339787.htmlhttp://www.aygfsteel.com/agun/comments/339787.htmlhttp://www.aygfsteel.com/agun/archive/2010/12/04/339787.html#Feedback0http://www.aygfsteel.com/agun/comments/commentRss/339787.htmlhttp://www.aygfsteel.com/agun/services/trackbacks/339787.html1,实例化bean
Spring IoC容器而言Qbean定义基本上描qC创徏一个或多个实际bean对象的内宏V当需要的时候,容器会从bean定义列表中取得一个指定的bean定义QƈҎbean定义里面的配|元数据使用反射机制来创Z个实际的对象。因此这一节将讲解如何告知Spring IoC容器我们要实例化的对象的类型以及如何实例化对象?

当采用XML描述配置元数据时Q将通过<bean/>元素的class属性来指定实例化对象的cd。class 属?(对应BeanDefinition实例的Class属?通常是必ȝ(不过也有两种例外的情形,“使用实例工厂Ҏ实例?#8221;?#8220;bean定义的?#8221;)。class属性主要有两种用途:在大多数情况下,容器直接通过反射调用指定cȝ构造器来创建bean(q有点等cM于在Java代码中用new操作W?Q在极少数情况下Q容器将调用cȝ静态工厂方法来创徏bean实例Qclass属性将用来指定实际h静态工厂方法的c?至于调用静态工厂方法创建的对象cd是当前classq是其他的class则无关紧??/p>

2, 延迟初始化bean
ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前q行实例化。提前实例化意味着作ؓ初始化过E的一部分QApplicationContext实例会创建ƈ配置所有的singleton bean。通常情况下这是g好事Q因样在配置中的M错误׃卛_被发玎ͼ否则的话可能要花几个时甚至几天Q?/p>

有时候这U默认处理可能ƈ不是你想要的。如果你不想让一个singleton bean在ApplicationContext实现在初始化时被提前实例化,那么可以bean讄为gq实例化。一个gq初始化bean告诉IoC 容器是在启动时还是在W一ơ被用到时实例化?/p>

在XML配置文g中,延迟初始化将通过<bean/>元素中的lazy-init属性来q行控制。例如:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true">
    <!-- various properties here... -->
</bean>
  <bean name="not.lazy" class="com.foo.AnotherBean">
    <!-- various properties here... -->
</bean>
当ApplicationContext实现加蝲上述配置Ӟ讄为lazy的bean不会在ApplicationContext启动时提前被实例化,而not.lazy却会被提前实例化?/p>

需要说明的是,如果一个bean被设|ؓ延迟初始化,而另一个非延迟初始化的singleton bean依赖于它Q那么当ApplicationContext提前实例化singleton beanӞ它必M保所有上qsingleton 依赖bean也被预先初始化,当然也包括设|ؓ延迟实例化的bean。因此,如果Ioc容器在启动的时候创Z那些讄为gq实例化的bean的实例,你也不要觉得奇怪,因ؓ那些延迟初始化的bean可能在配|的某个地方被注入到了一个非延迟初始化singleton bean里面?/p>

在容器层ơ中通过?lt;beans/>元素上?default-lazy-init'属性来控制延迟初始化也是可能的。如下面的配|:
<beans default-lazy-init="true">
    <!-- no beans will be eagerly pre-instantiated... -->
</beans>


3,自动装配QautowireQ协作?/span>
Spring IoC容器可以自动装配QautowireQ相互协作bean之间的关联关pR因此,如果可能的话Q可以自动让Spring通过查BeanFactory中的内容Q来替我们指定bean的协作者(其他被依赖的beanQ。由于autowire可以针对单个beanq行讄Q因此可以让有些bean使用autowireQ有些bean不采用。autowire的方便之处在减少或者消除属性或构造器参数的设|,q样可以l我们的配置文g减减肥![2] 在xml配置文g中,autowire一共有五种cdQ可以在<bean/>元素中用autowire属性指?

Table 3.2. Autowiring modes

模式 说明

    no 不用自动装配。必通过ref元素指定依赖Q这是默认设|。由于显式指定协作者可以配置更灵zR更清晰Q因此对于较大的部v配置Q推荐采用该讄。而且在某U程度上Q它也是pȝ架构的一U文档Ş式?br />  
    byName Ҏ属性名自动装配。此选项检查容器ƈҎ名字查找与属性完全一致的beanQƈ其与属性自动装配。例如,在bean定义中将autowire讄为by nameQ而该bean包含master属性(同时提供setMaster(..)ҎQ,Spring׃查找名ؓmaster的bean定义Qƈ用它来装配给master属性?br />  
    byType 如果容器中存在一个与指定属性类型相同的beanQ那么将与该属性自动装配。如果存在多个该cd的beanQ那么将会抛出异常,q指Z能用byType方式q行自动装配。若没有扑ֈ相匹配的beanQ则什么事都不发生Q属性也不会被设|。如果你不希望这P那么可以通过讄dependency-check="objects"让Spring抛出异常?br />  
    constructor 与byType的方式类|不同之处在于它应用于构造器参数。如果在容器中没有找C构造器参数cd一致的beanQ那么将会抛出异常?br />  
    autodetect 通过beancȝ自省机制QintrospectionQ来军_是用constructorq是byType方式q行自动装配。如果发现默认的构造器Q那么将使用byType方式?br />  

如果直接使用property和constructor-arg注入依赖的话Q那么将L覆盖自动装配。而且目前也不支持单类型的自动装配Q这里所说的单类型包括基本类型、String、Class以及单类型的数组Q这一点已l被设计Q将考虑作ؓ一个功能提供)。自动装配还可以与依赖检查结合用,q样依赖查将在自动装配完成之后被执行?/p>

理解自动装配的优~点是很重要的。其中优点包括:

自动装配能显著减配|的数量。不q,采用bean模板Q见q里Q也可以辑ֈ同样的目的?/p>

自动装配可以佉K|与java代码同步更新。例如,如果你需要给一个javacd加一个依赖,那么该依赖将被自动实现而不需要修攚w|。因此强烈推荐在开发过E中采用自动装配Q而在pȝ于E_的时候改为显式装配的方式?/p>

自动装配的一些缺点:

管自动装配比显式装配更奇Q但是,正如上面所提到的,Spring会尽量避免在装配不明的时候进行猜,因ؓ装配不明可能出现难以预料的l果Q而且Spring所理的对象之间的兌关系也不再能清晰的进行文档化?/p>

对于那些ҎSpring配置文g生成文档的工h_自动装配会使这些工h法生成依赖信息?/p>

如果采用by type方式自动装配Q那么容器中cd与自动装配bean的属性或者构造函数参数类型一致的bean只能有一个,如果配置可能存在多个q样的beanQ那么就要考虑采用昑ּ装配了?/p>

管使用autowire没有寚w之分Q但是能在一个项目中保持一定程度的一致性是最好的做法。例如,通常情况下如果没有用自动装配,那么仅自动装配一个或两个bean定义可能会引起开发者的h?/p>

agun 2010-12-04 11:50 发表评论
]]>
Ehcache~存配置http://www.aygfsteel.com/agun/archive/2010/12/04/339785.htmlagunagunSat, 04 Dec 2010 03:46:00 GMThttp://www.aygfsteel.com/agun/archive/2010/12/04/339785.htmlhttp://www.aygfsteel.com/agun/comments/339785.htmlhttp://www.aygfsteel.com/agun/archive/2010/12/04/339785.html#Feedback0http://www.aygfsteel.com/agun/comments/commentRss/339785.htmlhttp://www.aygfsteel.com/agun/services/trackbacks/339785.html阅读全文

agun 2010-12-04 11:46 发表评论
]]>
hibernate 支持 postgis函数http://www.aygfsteel.com/agun/archive/2008/07/15/215089.htmlagunagunTue, 15 Jul 2008 15:05:00 GMThttp://www.aygfsteel.com/agun/archive/2008/07/15/215089.htmlhttp://www.aygfsteel.com/agun/comments/215089.htmlhttp://www.aygfsteel.com/agun/archive/2008/07/15/215089.html#Feedback6http://www.aygfsteel.com/agun/comments/commentRss/215089.htmlhttp://www.aygfsteel.com/agun/services/trackbacks/215089.html阅读全文

agun 2008-07-15 23:05 发表评论
]]>
Spring中bean的作用域?转蝲) http://www.aygfsteel.com/agun/archive/2008/06/06/206320.htmlagunagunFri, 06 Jun 2008 06:30:00 GMThttp://www.aygfsteel.com/agun/archive/2008/06/06/206320.htmlhttp://www.aygfsteel.com/agun/comments/206320.htmlhttp://www.aygfsteel.com/agun/archive/2008/06/06/206320.html#Feedback0http://www.aygfsteel.com/agun/comments/commentRss/206320.htmlhttp://www.aygfsteel.com/agun/services/trackbacks/206320.htmlSpring上个版本的IoC容器支持两个不同的bean作用域(单例与原型)?br /> Spring 2.0改进了这一点,不仅提供了一些依赖于Spring部v环境Q比如说Q在web环境中的request和session作用域beanQ的额外的作用域,而且提供了所谓的'钩子'Q?hooks'Q(因ؓ找不到更好的表达QSpring用户可以创造自q作用域?/p>

应该注意的是Q即使单例与原型作用域beans的基本(内在Q实现发生了变化Q上q变化对最l用h说是透明?..现有的配|不需要改变或攑ּ?/p>
如何使用spring的作用域Q?

            

<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>


下面分别对spring 中的作用域分别介l一下:

1、singleton作用?/strong>

当一个bean的作用域讄为singletonQ那么Spring IOC容器中只会存在一个共享的bean实例Qƈ且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换a之,当把一个bean定义讄为singleton作用域时QSpring IOC容器只会创徏该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cacheQ中Qƈ且所有针对该bean的后l请求和引用都将q回被缓存的对象实例Q这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的Q单例设计模式表CZ个ClassLoader中只有一个class存在Q而这里的singleton则表CZ个容器对应一个beanQ也是说当一个bean被标识ؓsingleton时候,spring的IOC容器中只会存在一个该bean?/p>

配置实例Q?/p>

            

<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>

或?/p>

            

<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>

2、prototype

prototype作用域部|的beanQ每一ơ请求(其注入到另一个bean中,或者以E序的方式调用容器的getBean()ҎQ都会生一个新的bean实例Q相当于一个new的操作,对于prototype作用域的beanQ有一炚w帔R要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配|、装饰或者是装配完一个prototype实例后,它交给客户端,随后对该prototype实例不闻不问了。不何U作用域Q容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言QQ何配|好的析构生命周期回调方法都不会被调用。清除prototype作用域的对象q放Q何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一U可行方式是Q通过使用bean的后|处理器Q该处理器持有要被清除的bean的引用。)

配置实例Q?/p>

            

<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>

或?/p>

            

<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>

 
3、request

request表示该针Ҏ一ơHTTPh都会产生一个新的beanQ同时该bean仅在当前HTTP request内有效,配置实例Q?/p>

request、session、global session使用的时候,首先要在初始化web的web.xml中做如下配置Q?/p>

如果你用的是Servlet 2.4及以上的web容器Q那么你仅需要在web应用的XML声明文gweb.xml中增加下qContextListener卛_Q?/p>

            

<web-app>
...
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
...
</web-app>

如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实玎ͼ

            

<web-app>
..
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>

接着既可以配|bean的作用域了:

            

<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>


4、session

session作用域表C针对每一ơHTTPh都会产生一个新的beanQ同时该bean仅在当前HTTP session内有效,配置实例Q?/p>

配置实例Q?/p>

和request配置实例的前提一P配置好web启动文g可以如下配|:

            

<bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>

5、global session

global session作用域类g标准的HTTP Session作用域,不过它仅仅在Zportlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各U不同的portlet所׃n。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中用global session作用域来标识beanQ那么,web会自动当成sessioncd来用?/p>

配置实例Q?/p>

和request配置实例的前提一P配置好web启动文g可以如下配|:

            

<bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>

6、自定义bean装配作用?/strong>

在spring 2.0中作用域是可以Q意扩展的Q你可以自定义作用域Q甚至你也可以重新定义已有的作用域(但是你不能覆盖singleton和prototypeQ,spring的作用域由接口org.springframework.beans.factory.config.Scope来定义,自定义自q作用域只要实现该接口卛_Q下面给个实例:

我们建立一个线E的scopeQ该scope在表CZ个线E中有效Q代码如下:

            

publicclass MyScope implements Scope ...{
privatefinal ThreadLocal threadScope = new ThreadLocal() ...{
protected Object initialValue() ...{
returnnew HashMap();
}
};
public Object get(String name, ObjectFactory objectFactory) ...{
Map scope = (Map) threadScope.get();
Object object = scope.get(name);
if(object==null) ...{
object = objectFactory.getObject();
scope.put(name, object);
}
return object;
}
public Object remove(String name) ...{
Map scope = (Map) threadScope.get();
return scope.remove(name);
}
publicvoid registerDestructionCallback(String name, Runnable callback) ...{
}
public String getConversationId() ...{
// TODO Auto-generated method stub
returnnull;
}
}



注:本文的原文来源于|络?/p>

agun 2008-06-06 14:30 发表评论
]]>
վ֩ģ壺 | ͨ| Ѯ| Ժ| տ| | Ϸ| | | ϵ| | ӳ| ɼ| | | | | | Ҷ| ຣʡ| | IJ| ˲| | | | ɳ| | | ĵ| Դ| | | ʯ̨| | ʡ| | ɽ| | | |