ssh整合教程.ppt

上传人:s****8 文档编号:69351134 上传时间:2023-01-02 格式:PPT 页数:25 大小:2.42MB
返回 下载 相关 举报
ssh整合教程.ppt_第1页
第1页 / 共25页
ssh整合教程.ppt_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《ssh整合教程.ppt》由会员分享,可在线阅读,更多相关《ssh整合教程.ppt(25页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Struts2+springStruts2+spring注解配置注解配置注解配置注解配置简简介介介介Struts2中使用注解配置中使用注解配置Action与与Action配置相关的注解配置相关的注解注解注解(Annotation)是是J2SE5.0中提供的新特性,主要作用用于代替中提供的新特性,主要作用用于代替XML配置文件,使用注解来提供配置信息。配置文件,使用注解来提供配置信息。Struts2也提供了使用注解的方式来配也提供了使用注解的方式来配置置Action,这样就不再需要这样就不再需要struts.xml文件,以实现零配置。文件,以实现零配置。(需要导入需要导入struts2-conv

2、ention-plugin-2.1.6.jar,从从struts2.1版本开始,版本开始,ConventionPlugin作为替换替换作为替换替换CodebehindPlugin来实现来实现Struts2的零配置的零配置.同时导同时导入入Convention与与Codebehind会出现启动异常会出现启动异常)在此插件中包含如下在此插件中包含如下annotations:注解名称注解名称备注备注作用域作用域Action指定一个action名称类,方法,actions注解中Actions给一个action指定多个名称方法ParentPackage指定继承的包(struts2)名包,类Namespa

3、ce指定action所属的名称空间包,类Result定义一个result映射类,Results注解中Results定义一组result映射类,action注解中Namespaces指定一组action所属的名称空间包,类InterceptorRef一个拦截器类,InterceptorRefs注解中InterceptorRefs一组拦截器集合类,action注解中Struts2中使用注解配置中使用注解配置ActionParentPackageParentPackage注解的参数,如下:注解的参数,如下:NameSpace注解的参数如下表:注解的参数如下表:如:如:Namespace(value=

4、“/”)或或NameSpace(“/list”)参数参数类型类型是否必需是否必需默认值默认值描述描述valueString是无指要继承的父包注意:如果注解中只有一个名为注意:如果注解中只有一个名为value的参数,或者有其他参数,但其的参数,或者有其他参数,但其他参数都有默认值,那么在为他参数都有默认值,那么在为value参数设值时可以忽略参数设值时可以忽略value和等号和等号(=),例如:例如:ParentPackage(value=“struts-default”)ParentPackage(“struts-default”)这二种配置是一样的这二种配置是一样的参数参数类型类型是否必需是

5、否必需默认值默认值描述描述valueString是无指定action所属的名称空间Struts2中使用注解配置中使用注解配置ActionNampspace及及NamespacesNameSpace注解的参数如下表:注解的参数如下表:如:如:Namespace(value=“/”)或或NameSpace(“/list”)注意:如果没有给定注意:如果没有给定Namespace选项,会默认为选项,会默认为从定义的.package.locators标示开始到包结束的部分,就是命名空间,比如:com.ustb.web.user.userAction的命名空间是:”/user”。com.ustb.web.

6、user.detail.UserAction的命名空间是:”/user/detail”Namepspaces用于声明一组用于声明一组名称空间。参数如下表所示:名称空间。参数如下表所示:参数参数类型类型是否必需是否必需默认值默认值描述描述valueString是无指定action所属的名称空间参数参数类型类型是否必是否必需需默认值默认值描述描述valueNamespace否无在里面定义一Namespace的数组Namespaces(Namespace(/crud),Namespace(/user)publicclassBookActionextendsActionSupport.也就是可以通过发

7、起:也就是可以通过发起:/crud/book!add.action/user/book!add.action二个二个uri请求都能访问到请求都能访问到Action中的方法中的方法Struts2中使用注解配置中使用注解配置Action与注解有关的参数与注解有关的参数Result注解的参数如表所示:注解的参数如表所示:对应对应Results和和Result可分为全局的与本地的可分为全局的与本地的1.全局的全局的(global)2.本地的本地的(local)参数参数类型类型是否是否必需必需默认值默认值描述描述nameString否Actoin.SUCCESS指定result的逻辑名,即代码结果loc

8、ationString是无指定result对应的URLtypeString否dispatcher指定result的类型paramsString否为result传递参数,格式为key1,value1,key2,value2Results(Result(name=failure,location=/WEB-INF/fail.jsp)publicclassHelloWorldextendsActionSupportpublicStringexecute()returnfailure;publicclassHelloWorldextendsActionSupportAction(value=/othe

9、r/bar,results=Result(name=error,location=,type=redirect)publicStringmethod1()returnerror;Struts2中使用注解配置中使用注解配置Action与注解有关的参数与注解有关的参数Results注解的参数如表所示:注解的参数如表所示:参数参数类型类型是否必需是否必需默认值默认值描述描述valueResult是无为action定义一组result映射示例:示例:Results(Result(name=“input”,value=“/input.jsp”),Result(name=“success”value=“/

10、success.jsp”)/上例中定义了两个上例中定义了两个result映射。一个逻辑名是映射。一个逻辑名是input,资源位置是资源位置是/input.jsp。另一个逻辑名是。另一个逻辑名是success,资源位置是资源位置是/success.jspStruts2中使用注解配置中使用注解配置ActionAction在默认的情况下,当在默认的情况下,当Action的类名以的类名以Action字符结尾字符结尾(如:如:HelloAction),不进行任何配置,将默认采用去掉,不进行任何配置,将默认采用去掉”Action”的字符且把首字的字符且把首字母变成小写母变成小写(如:如:HelloActi

11、on-hello)作为作为action的名字。如:的名字。如:通过使用通过使用Action可以可以ExceptionsMappings定定action的名称。的名称。publicclassHelloActionextendsActionSupportpublicStringmethod1().publicStringmethod2()./如果要调用上述的如果要调用上述的method1()及及method2()方法,可以用下面方法,可以用下面URImethod1/hello!method1.actionmethod2/hello!method2.action参数参数类型类型描述描述valueSt

12、ring指定action的名称resultsResults指定此action中的result集合interceptorRefsInterceptorRefs指定此action下对应的拦截器paramsString提供的参数exceptoinMappingsExceptionMappings指定的异常处理publicclassHelloActionextendsActionSupportAction(action1)publicStringmethod1().Action(/user/action2)publicStringmethod2().Action(value=/user/action3

13、“,results=Result(name=viewsuccess,location=/view/showbooks.jsp),Result(name=viewinput,location=/view/showbooks.jsp,type=redirectAction“),interceptorRefs=InterceptorRef(mydefaultStack)publicStringmethod3()./如果采用此种方式,可以使用如下方式访问如果采用此种方式,可以使用如下方式访问method1/action1!method1.action.method2/user/action2!meth

14、od2.actionmethod3/user/action3!method3.actionStruts2中使用注解配置中使用注解配置ActionActions可以为可以为action类定义一组访问的类定义一组访问的action名称,主要有如下参数:名称,主要有如下参数:比如:比如:一个方法被Action或Actions注释后,只是多了一种调用方式,而不是说覆盖了原来的调用方式。参数名参数名类型类型描述描述valueAction用于包含一组Action注解publicclassHelloActionextendsActionSupportActions(Action(/different/url

15、),Action(/another/url)publicStringmethod1()./different/url!method1.action或/another/url!method1.action来调用method1方法。publicclassHelloActionextendsActionSupportAction(/another/url)publicStringmethod1().我们调用method1方法可以通过两种方式:1/hello!method1.action2/another/url!method1.action可见,两种方式均可对method1方法进行调用,唯一的区别就

16、是,两种调用的映射是不一样的,所以,想跳转到不同的界面,这是一个非常好的选择。Struts2中使用注解配置中使用注解配置Action当当Namespace与与Action配合使用注意事项配合使用注意事项如果在Action注解中包括”/”字符地,则意味着该注释覆盖了默认的namespace(这里是/),此时访问action就有一些小的改动。如下例:Namespace(/other)publicclassHelloWorldextendsActionSupportpublicStringmethod1().Action(url)publicStringmethod2().Action(/diffe

17、rent/url)publicStringmethod3().通过/other/hello-world!method1.action访问method1方法。通过/other/url!method2.action访问method2方法通过/different/url!method3.action访问method3方法与Action注释不同的是,该注释覆盖了默认的namespace(这里是/),此时再用hello!method1.action已经不能访问method1了.Struts2中使用注解配置中使用注解配置ActionInterceptorRef及及InterceptorRefs可以使用可以

18、使用InterceptorRef来为一个来为一个action定义一个拦截器,注意此注定义一个拦截器,注意此注解只是在此解只是在此action上引用拦截器,此拦截器需要在上引用拦截器,此拦截器需要在struts.xml中进行定义。中进行定义。此注解可以加在此注解可以加在类,InterceptorRefs等上面等上面。DefaultInterceptorRef可可以合定义一个默认的拦截器以合定义一个默认的拦截器.参数参数类型类型描述描述valueString用于指定拦截器的名字paramsString用于指定传递的参数publicclassHelloWorldextendsActionSuppor

19、tAction(“url”,interceptorRefs=InterceptorRef“mystack”,InterceptorRef(“logincheck”)publicStringmethod2().InterceptorRefs(InterceptorRef(mydefaultStack)publicclassHelloWorldextendsActionSupportpublicStringmethod2().Struts2中使用注解配置中使用注解配置Action使用注解配置使用注解配置Action注意事项注意事项在在Struts2中使用注解配置中使用注解配置action,有一些需

20、要注意的地方。,有一些需要注意的地方。a)与与action配置相关的配置相关的4个注解只能用于类级别个注解只能用于类级别b)需要在需要在web.xml文件中为文件中为FilterDispatcher过滤器设置过滤器设置actionPackages参数参数指定使用注解配置的指定使用注解配置的Action所在包的列表,多个包之间以逗号所在包的列表,多个包之间以逗号(,)分隔。这些包和它们的子包都将被扫描,定包中的所有实现了分隔。这些包和它们的子包都将被扫描,定包中的所有实现了Action接口的类或是以接口的类或是以”Action”结尾的类都将被检测。所以后者允许我们编写结尾的类都将被检测。所以后者

21、允许我们编写POJOAction类,而不需要实现类,而不需要实现Action接口。如果有多个包,则以逗接口。如果有多个包,则以逗号号(,)分隔。分隔。c)包名,名称空间和包名,名称空间和action名的产生方式如下:名的产生方式如下:lAction类所在的包作为类所在的包作为action包名包名l除了使用除了使用Namespacke注解指定名称空间外,也可以通过子包名来产生名称空间。如:注解指定名称空间外,也可以通过子包名来产生名称空间。如:action所在的包为所在的包为.test.action,如果,如果参数指定的包是参数指定的包是.test,那么,那么“/action”将作为名称空间的名

22、字。将作为名称空间的名字。l通过通过action的类名来产生的类名来产生action的名字。如类名以的名字。如类名以“Action”结尾,那么结尾,那么“Action”将将被被去掉,其余部分将首字母变小写作为去掉,其余部分将首字母变小写作为action的名字。如:的名字。如:RegisterAction将将会产生的将将会产生的action的名字是的名字是register。d)如果想让包继承如果想让包继承struts-default包,无须使用包,无须使用ParentPackage注解。在框注解。在框架内部,动让你的包继承架内部,动让你的包继承struts-default包。包。strutsor

23、g.apache.struts2.dispatcher.FilterDispatcheractionPackagescom.struts2.action1,com.struts.action2-com.struts2.actionSpring2.5中的注解中的注解基于注解进行基于注解进行Bean配置配置基于注释(基于注释(Annotation)的配置有越来越流行的趋势,)的配置有越来越流行的趋势,Spring2.5顺顺应这种趋势,提供了完全基于注释配置应这种趋势,提供了完全基于注释配置Bean、装配、装配Bean的功能,您可以的功能,您可以使用基于注释的使用基于注释的SpringIoC替换原来

24、基于替换原来基于XML的配置。本文通过实例详细的配置。本文通过实例详细讲述了讲述了Spring2.5基于注释基于注释IoC功能的使用。功能的使用。注释配置相对于注释配置相对于XML配置具有很多的优势:配置具有很多的优势:它可以充分利用它可以充分利用Java的反射机制获取类结构信息,这些信息可以有效减少配置的的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用工作。如使用JPA注释配置注释配置ORM映射时,我们就不需要指定映射时,我们就不需要指定PO的属性名、类的属性名、类型等信息,如果关系表字段和型等信息,如果关系表字段和PO属性名、类型都一致,您甚至无需编写任务属属性名、类型都一

25、致,您甚至无需编写任务属性映射信息性映射信息因为这些信息都可以通过因为这些信息都可以通过Java反射机制获取。反射机制获取。注释和注释和Java代码位于一个文件中,而代码位于一个文件中,而XML配置采用独立的配置文件,大多数配配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和置信息在程序开发完成后都不会调整,如果配置信息和Java代码放在一起,有助代码放在一起,有助于增强程序的内聚性。而采用独立的于增强程序的内聚性。而采用独立的XML配置文件,程序员在编写一个功能时,配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低

26、开发效往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。率。在使用注释配置之前,先来回顾一下传统上是如何配置在使用注释配置之前,先来回顾一下传统上是如何配置Bean并完成并完成Bean之间依赖关系的建立。下面是之间依赖关系的建立。下面是3个类,它们分别是个类,它们分别是Office、Car和和Boss,这这3个类需要在个类需要在Spring容器中配置为容器中配置为Bean,如下:,如下:publicclassOfficeprivateStringofficeNo=”001”;get/setterpublic class Office private String off

27、iceNo=”001”;/省略 get/setter Override public String toString()return officeNo:+officeNo;publicclassCarprivateStringbrand;privatedoubleprice;/省略get/setterpublicclassBossprivateCarcar;privateOfficeoffice;get/setterSpring2.5中的注解中的注解在在spring中使用注解的前期工作中使用注解的前期工作要使注解可用,必顺使用要使注解可用,必顺使用Java5以上的版本。另外还需要在以上的版本。

28、另外还需要在bean.xml进进行如下配置,有二种方式:行如下配置,有二种方式:显示定义显示定义在在bean.xml中配置如下内容:中配置如下内容:隐式定义隐式定义此配置的作用是帮你导入处理此配置的作用是帮你导入处理annoation的类,也就相当于不需要再配置的类,也就相当于不需要再配置注意在使用注意在使用需要在头部导入命名空间。需要在头部导入命名空间。Spring2.5中的注解中的注解Autowired注释注释Spring2.5引入了引入了Autowired注释,它可以对类成员变量、方法及注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。来看一下使用构造函数进行标注,完

29、成自动装配的工作。来看一下使用Autowired进行进行成员变量自动注入的代码:成员变量自动注入的代码:publicclassBossAutowiredprivateCarcar;AutowiredprivateOfficeoffice;setter/getter.当当Spring容器启动时,容器启动时,AutowiredAnnotationBeanPostProcessor将扫描将扫描Spring容器中所有容器中所有Bean,当发现当发现Bean中拥有中拥有Autowired注注释时就找到和其匹配(默认按类型匹配)释时就找到和其匹配(默认按类型匹配)的的Bean,并注入到对应的地方中去。并注

30、入到对应的地方中去。Spring将直接采用将直接采用Java反射机制反射机制对对Boss中的中的car和和office这两个私有这两个私有成员变量进行自动注入。所以对成员变成员变量进行自动注入。所以对成员变量使用量使用Autowired后,您大可将它们后,您大可将它们的的setter方法(方法(setCar()和和setOffice())从从Boss中删除中删除。Spring2.5中的注解中的注解Autowired对方法或构造函数进行标注对方法或构造函数进行标注将将Autowired注释标注释标注在构造函数上注在构造函数上将将Autowired注释标注在注释标注在set方方法上法上将将Auto

31、wired注释标注释标注在多个参数函数上注在多个参数函数上Spring2.5中的注解中的注解当候选当候选Bean数目为数目为0时的应对方法时的应对方法在默认情况下使用在默认情况下使用Autowired注释进行自动注入时,注释进行自动注入时,Spring容器中容器中匹配的候选匹配的候选Bean数目必须有且仅有一个。当找不到一个匹配的数目必须有且仅有一个。当找不到一个匹配的Bean时,时,Spring容器将抛出容器将抛出BeanCreationException异常,并指出必须至少拥有一异常,并指出必须至少拥有一个匹配的个匹配的Bean。我们可以来做一个实验:。我们可以来做一个实验:由于offic

32、eBean被注释掉了,所以Spring容器中将没有类型为Office的Bean了,而Boss的office属性标注了Autowired,当启动Spring容器时,异常就产生了。当不能确定当不能确定Spring容器中一定拥有某个类的容器中一定拥有某个类的Bean时,可以在需要时,可以在需要自动注入该类自动注入该类Bean的地方可以使用的地方可以使用Autowired(required=false),这等于告诉,这等于告诉Spring:在找不到匹配:在找不到匹配Bean时也不报错。对于此种情时也不报错。对于此种情况,一般只会在测试与开发周期中会出现,所以象此种注解很少用到。况,一般只会在测试与开发

33、周期中会出现,所以象此种注解很少用到。Spring2.5中的注解中的注解当候选当候选Bean数目不为数目不为1时的应对方法时的应对方法如果Spring容器中拥有多个候选Bean,Spring容器在启动时也会抛出BeanCreationException异常。来看下面的例子:我们在Spring容器中配置了两个类型为Office类型的Bean,当对Boss的office成员变量进行自动注入时,Spring容器将无法确定到底要用哪一个Bean,因此异常发生了。Spring允许我们通过允许我们通过Qualifier注释注释指定注入指定注入Bean的名称,这样歧义就消的名称,这样歧义就消除了,可以通过下

34、面的方法解决异常:除了,可以通过下面的方法解决异常:Qualifier(“office”)中的office是Bean的名称,所以Autowired和Qualifier结合使用时,自动注入的策略就从byType转变成byName了。Autowired可以对成员变量、方法以及构造函数进行注释,而Qualifier的标注对象是成员变量、方法入参、构造函数入参。对成员变量使用对成员变量使用Qualifier注释注释对构造函数变量使用对构造函数变量使用Qualifier注释注释Spring2.5使用使用使用使用JSR-250的注释的注释Resource注解注解Resource的作用相当于Autowire

35、d,只不过Autowired按byType自动注入,面Resource默认按byName自动注入罢了。Resource有两个属性是比较重要的,分别是name和type,Spring将Resource注释的name属性解析为Bean的名字,而type属性则解析为Bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。Resource注释类位于Spring发布包的lib/j2ee/common-annotations.jar类包中,因此在

36、使用之前必须将其加入到项目的类库中。同时要在bean.xml文件中加入或/(需要加入声明需要加入声明)Spring2.5使用使用使用使用JSR-250的注释的注释PostConstruct和和PreDestroySpring容器中的Bean是有生命周期的,Spring允许在Bean在初始化完成后以及Bean销毁前执行特定的操作,您既可以通过实现InitializingBean/DisposableBean接口来定制初始化之后/销毁之前的操作方法,也可以通过元素的init-method/destroy-method属性指定初始化之后/销毁之前调用的操作方法。JSR-250为初始化之后/销毁之前方

37、法的指定定义了两个注释类,分别是PostConstruct和PreDestroy,这两个注释只能应用于方法上。标注了PostConstruct注释的方法将在类实例化后调用,而标注了PreDestroy的方法将在类销毁之前调用。通过元素的init-method/destroy-method属性进行配置,都只能为Bean指定一个初始化/销毁的方法。但是使用PostConstruct和PreDestroy注释却可以指定多个初始化/销毁方法,那些被标注PostConstruct或PreDestroy注释的方法都会在初始化/销毁时被执行。Spring2.5使用使用使用使用JSR-250的注释的注释使用使

38、用Component虽然我们可以通过虽然我们可以通过Autowired或或Resource在在Bean类中使用自类中使用自动注入功能,但是动注入功能,但是Bean还是在还是在XML文件中通过文件中通过进行定义进行定义也也就是说,在就是说,在XML配置文件中定义配置文件中定义Bean,通过,通过Autowired或或Resource为为Bean的成员变量、方法入参或构造函数入参提供自动注入的成员变量、方法入参或构造函数入参提供自动注入的功能。的功能。能否也通过注释定义能否也通过注释定义Bean,从,从XML配置文件中完全移除配置文件中完全移除Bean定定义的配置呢?义的配置呢?答案是肯定的,我们

39、通过答案是肯定的,我们通过Spring2.5提供的提供的Component注注释就可以达到这个目标了。释就可以达到这个目标了。下面,我们完全使用注释定义下面,我们完全使用注释定义Bean并完成并完成Bean之间装配:之间装配:Component有一个可选的入参,用于指定有一个可选的入参,用于指定Bean的名称,在的名称,在Boss中,我们就将中,我们就将Bean名称定义为名称定义为“boss”。一般情况下,一般情况下,Bean都都是是singleton的,需要注入的,需要注入Bean的地方仅需的地方仅需要通过要通过byType策略就可以自动注入了,所以策略就可以自动注入了,所以大可不必指定大可

40、不必指定Bean的名称。的名称。简化版本的简化版本的bean.xml文件文件用此种方式,不需要在配置文件中再配置用此种方式,不需要在配置文件中再配置bean,也不需要再导入上面对应的处理也不需要再导入上面对应的处理bean。也就是说。也就是说可以不需要在配置文件中使用可以不需要在配置文件中使用了,因为此种方了,因为此种方式会自动导入式会自动导入Spring2.5使用使用使用使用JSR-250的注释的注释Scope及具有特殊语义的注释及具有特殊语义的注释默认情况下通过默认情况下通过Component定义的定义的Bean都是都是singleton的,如果的,如果需要使用其它作用范围的需要使用其它作

41、用范围的Bean,可以通过可以通过Scope注释来达到目标,如以注释来达到目标,如以下代码所示:下代码所示:采用具有特殊语义的注释采用具有特殊语义的注释Spring2.5中除了提供中除了提供Component注释外,还定义了几个拥有特殊注释外,还定义了几个拥有特殊语义的注释,它们分别是:语义的注释,它们分别是:Repository、Service和和Controller。在。在目前的目前的Spring版本中,这版本中,这3个注释和个注释和Component是等效的,但是从注是等效的,但是从注释类的命名上,很容易看出这释类的命名上,很容易看出这3个注释分别和持久层、业务层和控制层个注释分别和持久

42、层、业务层和控制层(Web层)相对应。虽然目前这层)相对应。虽然目前这3个注释和个注释和Component相比没有什么新相比没有什么新意,但意,但Spring将在以后的版本中为它们添加特殊的功能。所以,如果将在以后的版本中为它们添加特殊的功能。所以,如果Web应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用分别采用Repository、Service和和Controller对分层中的类进行注释,对分层中的类进行注释,而用而用Component对那些比较中立的类进行注释对那些比较中立的类进行注释。Scop

43、e(prototype)Component(boss)publicclassBossSpring2.5使用使用使用使用JSR-250的注释的注释说明说明还允许定义过滤器将基包下的某些类纳还允许定义过滤器将基包下的某些类纳入或排除。入或排除。Spring支持以下支持以下4种类型的过滤方式,通过下表说明:种类型的过滤方式,通过下表说明:过滤器类型过滤器类型说明说明注释假如com.baobaotao.SomeAnnotation是一个注释类,我们可以将使用该注释的类过滤出来。类名指定通过全限定类名进行过滤,如您可以指定将com.baobaotao.Boss纳入扫描,而将com.baobaotao.C

44、ar排除在外。正则表达式通过正则表达式定义过滤的类,如下所示:com.baobaotao.Default.*AspectJ表达式通过AspectJ表达式定义过滤的类,如下所示:com.baobaotao.*Service+注释配置和注释配置和XML配置的适用场合配置的适用场合使用说明使用说明是否有了这些IOC注释,我们就可以完全摒除原来XML配置的方式呢?答案是否定的。有以下几点原因:注释配置不一定在先天上优于XML配置。如果Bean的依赖关系是固定的,(如Service使用了哪几个DAO类),这种配置信息不会在部署时发生调整,那么注释配置优于XML配置;反之如果这种依赖关系会在部署时发生调整

45、,XML配置显然又优于注释配置,因为注释是对Java源代码的调整,您需要重新改写源代码并重新编译才可以实施调整。如果Bean不是自己编写的类(如JdbcTemplate、SessionFactoryBean等),注释配置将无法实施,此时XML配置是唯一可用的方式。注释配置往往是类级别的,而XML配置则可以表现得更加灵活。比如相比于Transaction事务注释,使用aop/tx命名空间的事务配置更加灵活和简单。所以在实现应用中,我们往往需要同时使用注释配置和XML配置,对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用XML配置。Spring会在具体实施Bean创建和Bean注入之前将这两种配置方式的元信息融合在一起。Thankyou

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com