﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-少年阿宾-随笔分类-spring</title><link>http://www.blogjava.net/stevenjohn/category/52035.html</link><description>那些青春的岁月</description><language>zh-cn</language><lastBuildDate>Mon, 07 Sep 2015 14:47:19 GMT</lastBuildDate><pubDate>Mon, 07 Sep 2015 14:47:19 GMT</pubDate><ttl>60</ttl><item><title>Spring什么时候实例化bean</title><link>http://www.blogjava.net/stevenjohn/archive/2015/04/20/424549.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Mon, 20 Apr 2015 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/04/20/424549.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/424549.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/04/20/424549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/424549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/424549.html</trackback:ping><description><![CDATA[<span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Spring什么时候实例化bean，首先要分2种情况&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">&nbsp; 第一：如果你使用BeanFactory作为Spring Bean的工厂类，则所有的bean都是在第一次使用该Bean的时候实例化&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">&nbsp; 第二：如果你使用ApplicationContext作为Spring Bean的工厂类，则又分为以下几种情况：&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （1）：如果bean的scope是singleton的，并且lazy-init为false（默认是false，所以可以不用设置），则ApplicationContext启动的时候就实例化该Bean，并且将实例化的Bean放在一个map结构的缓存中，下次再使用该Bean的时候，直接从这个缓存中取&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （2）：如果bean的scope是singleton的，并且lazy-init为true，则该Bean的实例化是在第一次使用该Bean的时候进行实例化&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （3）：如果bean的scope是prototype的，则该Bean的实例化是在第一次使用该Bean的时候进行实例化&nbsp;<br /><br /><br /></span><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">1、lazy init 在getBean时实例化&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">2、非lazy的单例bean 容器初始化时实例化&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">3、prototype等 getBean时实例化</span><br /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><br /><br /><br /></span><h3 style="font-size: 16px; line-height: 1.5em; margin: 0px 0px 0.5em; padding: 10px 0px 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; widows: auto; background-color: #ffffff;"><a href="http://glzaction.iteye.com/blog/1286325" style="color: #108ac6;"><br /><div>spring三种实例化bean的方式</div><p style="margin: 0px; padding: 0px; color: #000000; font-size: 14px; font-weight: normal; line-height: 25.2px; widows: auto;">在spring中有三中实例化bean的方式：</p><p style="margin: 0px; padding: 0px; color: #000000; font-size: 14px; font-weight: normal; line-height: 25.2px; widows: auto;">一、使用构造器实例化；</p><p style="margin: 0px; padding: 0px; color: #000000; font-size: 14px; font-weight: normal; line-height: 25.2px; widows: auto;">二、使用静态工厂方法实例化；</p><p style="margin: 0px; padding: 0px; color: #000000; font-size: 14px; font-weight: normal; line-height: 25.2px; widows: auto;">三、使用实例化工厂方法实例化。</p><p style="margin: 0px; padding: 0px; color: #000000; font-size: 14px; font-weight: normal; line-height: 25.2px; widows: auto;">&nbsp;</p><p style="margin: 0px; padding: 0px; color: #000000; font-size: 14px; font-weight: normal; line-height: 25.2px; widows: auto;">每种实例化所采用的配置是不一样的：</p><p style="margin: 0px; padding: 0px; color: #000000; font-size: 14px; font-weight: normal; line-height: 25.2px; widows: auto;"><strong><span style="font-size: small;">一、使用构造器实例化；</span></strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-size: 14px; font-weight: normal; line-height: 25.2px; widows: auto;">这种实例化的方式可能在我们平时的开发中用到的是最多的，因为在xml文件中配置简单并且也不需要额外的工厂类来实现。</p></a></h3><div><span style="line-height: 24px;">&lt;!--applicationContext.xml配置：--&gt;</span></div><div><span style="line-height: 24px;"><br /></span></div><div><span style="line-height: 24px;">&lt;bean id="personService" class="cn.mytest.service.impl.PersonServiceBean"&gt;&lt;/bean&gt;<br /></span><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">&nbsp;id是对象的名称，class是要实例化的类，然后再通过正常的方式进调用实例化的类即可，比如：</span><br /><div><span style="line-height: 24px;">public void instanceSpring(){</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //加载spring配置文件</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">		</span>ApplicationContext ac = new ClassPathXmlApplicationContext(</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">				</span>new String[]{</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">						</span>"/conf/applicationContext.xml"</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">				</span>});</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">		</span>//调用getBean方法取得被实例化的对象。</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">		</span>PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService");</span></div><div><span style="white-space: pre; line-height: 24px;">		</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">		</span>psb.save();</span></div><div><span style="line-height: 24px;">}</span></div><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">采用这种实例化方式要注意的是：<em><span style="font-size: small;">要实例化的类中如果有构造器的话，一定要有一个无参的构造器。</span></em></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;"><strong><span style="font-size: small;">二、使用静态工厂方法实例化；</span></strong></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">根据这个中实例化方法的名称就可以知道要想通过这种方式进行实例化就要具备两个条件：（一）、要有工厂类及其工厂方法；（二）、工厂方法是静态的。OK，知道这两点就好办了，首先创建工程类及其静态方法：</p><div>package cn.mytest.service.impl;</div><div></div><div>/**</div><div>*创建工厂类</div><div>*</div><div>*/</div><div>public class PersonServiceFactory {</div><div>&nbsp; &nbsp; //创建静态方法</div><div><span style="white-space:pre">	</span>public static PersonServiceBean createPersonServiceBean(){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//返回实例化的类的对象</div><div><span style="white-space:pre">		</span>return new PersonServiceBean();</div><div><span style="white-space:pre">	</span>}</div><div>}</div><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">然后再去配置spring配置文件，配置的方法和上面有点不同，这里也是关键所在</span><br /><div>&lt;!--applicationContext.xml配置：--&gt;</div><div></div><div>&lt;bean id="personService1" class="cn.mytest.service.impl.PersonServiceFactory" factory-method="createPersonServiceBean"&gt;&lt;/bean&gt;</div><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">&nbsp;id是实例化的对象的名称，class是工厂类，也就实现实例化类的静态方法所属的类，<span style="white-space: pre; background-color: #fafafa;">factory-method是实现实例化类的静态方法。</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">然后按照正常的调用方法去调用即可：</p><div>public void instanceSpring(){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //加载spring配置文件</div><div><span style="white-space:pre">		</span>ApplicationContext ac = new ClassPathXmlApplicationContext(</div><div><span style="white-space:pre">				</span>new String[]{</div><div><span style="white-space:pre">						</span>"/conf/applicationContext.xml"</div><div><span style="white-space:pre">				</span>});</div><div><span style="white-space:pre">		</span>//调用getBean方法取得被实例化的对象。</div><div><span style="white-space:pre">		</span>PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService1");</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>psb.save();</div><div>}</div><br /><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;"><strong><span style="font-size: small;">三、使用实例化工厂方法实例化。</span></strong></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">这个方法和上面的方法不同之处在与使用该实例化方式工厂方法不需要是静态的，但是在spring的配置文件中需要配置更多的内容，，首先创建工厂类及工厂方法：</p><div>package cn.mytest.service.impl;</div><div></div><div>/**</div><div>*创建工厂类</div><div>*</div><div>*/</div><div>public class PersonServiceFactory {</div><div>&nbsp; &nbsp; //创建静态方法</div><div><span style="white-space:pre">	</span>public PersonServiceBean createPersonServiceBean1(){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//返回实例化的类的对象</div><div><span style="white-space:pre">		</span>return new PersonServiceBean();</div><div><span style="white-space:pre">	</span>}</div><div>}</div><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">然后再去配置spring配置文件，配置的方法和上面有点不同，这里也是关键所在</span><br /><div>&lt;!--applicationContext.xml配置：--&gt;</div><div></div><div>&lt;bean id="personServiceFactory" class="cn.mytest.service.impl.PersonServiceFactory"&gt;&lt;/bean&gt;</div><div></div><div>&lt;bean id="personService2" factory-bean="personServiceFactory" factory-method="createPersonServiceBean1"&gt;&lt;/bean&gt;</div><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">&nbsp;这里需要配置两个bean，第一个bean使用的构造器方法实例化工厂类，第二个bean中的id是实例化对象的名称，<span style="white-space: pre;">factory-bean对应的被实例化的工厂类的对象名称，也就是第一个bean的id，factory-method是非静态工厂方法。</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; widows: auto; background-color: #ffffff;">然后按照正常的调用方法去调用即可：</p></div><div><div><span style="line-height: 24px;">public void instanceSpring(){</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //加载spring配置文件</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">		</span>ApplicationContext ac = new ClassPathXmlApplicationContext(</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">				</span>new String[]{</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">						</span>"/conf/applicationContext.xml"</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">				</span>});</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">		</span>//调用getBean方法取得被实例化的对象。</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">		</span>PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService2");</span></div><div><span style="white-space: pre; line-height: 24px;">		</span></div><div><span style="line-height: 24px;"><span style="white-space:pre">		</span>psb.save();</span></div><div><span style="line-height: 24px;">}</span></div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/424549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-04-20 15:01 <a href="http://www.blogjava.net/stevenjohn/archive/2015/04/20/424549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring AOP AspectJ </title><link>http://www.blogjava.net/stevenjohn/archive/2015/04/20/424535.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Sun, 19 Apr 2015 18:07:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/04/20/424535.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/424535.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/04/20/424535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/424535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/424535.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;">AOP</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;"><em>面向切面编程</em>（AOP）通过提供另外一种思考程序结构的途经来弥补面向对象编程（OOP）的不足。在OOP中模块化的关键单元是类（classes），而在AOP中模块化的单元则是<em>切面</em>。切面能对关注点进行模块化，例如横切多个类型和对象的事务管理。（在AOP术语中通常称作<em>横切（crosscutting）</em>关注点。）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;"><em>AOP框架</em>是Spring的一个重要组成部分。但是Spring IoC容器并不依赖于AOP，这意味着你有权利选择是否使用AOP，AOP做为Spring IoC容器的一个补充,使它成为一个强大的中间件解决方案。<br /><br /></p><div>AOP即Aspect-Oriented Programming的缩写，中文意思是面向切面（或方面）编程。AOP实际上是一种编程思想，可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种思想。</div><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;">AOP在Spring Framework中的作用</p><div style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;"><ul style="margin: 0px 0px 1.5em; padding: 0px;"><li style="margin: 0px 0px 0.25em 30px; padding: 0px;"><p style="margin: 0px; padding: 0px;">提供声明式企业服务，特别是为了替代EJB声明式服务。最重要的服务是<a href="http://quicker.iteye.com/admin/blogs/ch09s05.html" title="9.5.&nbsp;声明式事务管理" style="color: #006699;"><em>声明性事务管理</em></a>。</p></li><li style="margin: 0px 0px 0.25em 30px; padding: 0px;"><p style="margin: 0px; padding: 0px;">允许用户实现自定义切面，用AOP来完善OOP的使用。</p></li></ul></div><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;">目前AOP主要有：Spring AOP ,JBOSS AOP ,AspectJ AOP</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;">AOP与OOP：可以理解为OOP是纵向的采用继承树形式的。而AOP是横向的<br /><br />Spring AOP:</p><div><font face="Helvetica, Tahoma, Arial, sans-serif"><span style="line-height: 25.200000762939453px;">由于Spring AOP是容易实现的，如果你计划在Spring Beans之上将横切关注点模块化，Spring的这一目标将是要点之一。但同样的目标也可能成为一个限制，如果你用的是普通的Java对象而不是Spring beans,并基于此将横切关注点模块化的话。另一方面，AspectJ可用于基于普通Java对象的模块化，但在实施之前需要良好的关于这个主题的知识。</span></font></div><div>&nbsp;</div><div><div>Spring AOP致力于提供一种能够与Spring IoC紧密集成的面向方面框架的实现，以便于解决在开发企业级项目时面临的常见问题。明确你在应用横切关注点(cross-cutting concern)时（例如事物管理、日志或性能评估），需要处理的是Spring beans还是POJO。如果正在开发新的应用，则选择Spring AOP就没有什么阻力。但是如果你正在维护一个现有的应用（该应用并没有使用Spring框架），AspectJ就将是一个自然的选择了。为了详细说明这一点，假如你正在使用Spring AOP，当你想将日志功能作为一个通知(advice)加入到你的应用中，用于追踪程序流程，那么该通知(Advice)就只能应用在Spring beans的连接点(Joinpoint)之上。</div><div>&nbsp;</div><div></div></div><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;">AspectJ AOP:</p><div><font face="Helvetica, Tahoma, Arial, sans-serif"><span style="line-height: 25.200000762939453px;">使用&#8220;AspectJ&#8221;你可以在任何Java对象上应用通知，而不需要在任何文件中创建或配置任何bean。</span></font></div><div>&nbsp;</div><div><span style="line-height: 25.200000762939453px;"><br /></span></div><div><span style="line-height: 25.200000762939453px;">另一个需要考虑的因素是，你是希望在编译期间进行织入(weaving)，还是编译后(post-compile)或是运行时(run-time)。Spring只支持运行时织入。如果你有多个团队分别开发多个使用Spring编写的模块（导致生成多个jar文件，例如每个模块一个jar文件），并且其中一个团队想要在整个项目中的所有Spring bean（例如，包括已经被其他团队打包了的jar文件）上应用日志通知（在这里日志只是用于加入横切关注点的举例），那么通过配置该团队自己的Spring配置文件就可以轻松做到这一点。之所以可以这样做，就是因为Spring使用的是运行时织入。</span></div><div><span style="line-height: 25.200000762939453px;"><br /></span></div><div>&nbsp;因为Spring基于代理模式（使用CGLIB），它有一个使用限制，即无法在使用final修饰的bean上应用横切关注点。因为代理需要对Java类进行继承，一旦使用了关键字final，这将是无法做到的。</div><div><p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 5pt; padding-top: 0px">在这种情况下，你也许会考虑使用AspectJ，其支持编译期织入且不需要生成代理。</p></div><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;"><br /></p><div><font face="Helvetica, Tahoma, Arial, sans-serif"><span style="line-height: 25.200000762939453px;">于此相似，在static和final方法上应用横切关注点也是无法做到的。因为Spring基于代理模式。如果你在这些方法上配置通知，将导致运行时异常，因为static和final方法是不能被覆盖的。在这种情况下，你也会考虑使用AspectJ，因为其支持编译期织入且不需要生成代理。</span></font></div><div>&nbsp;</div><div>缺点：</div><div><font face="Helvetica, Tahoma, Arial, sans-serif"><span style="line-height: 25.200000762939453px;">使用AspectJ的一个间接局限是，因为AspectJ通知可以应用于POJO之上，它有可能将通知应用于一个已配置的通知之上。对于一个你没有注意到这方面问题的大范围应用的通知，这有可能导致一个无限循环。</span></font></div><div>&nbsp;</div><div></div><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;"><span style="font-family: Simsun; font-size: medium; line-height: normal;">面向切面编程，把散落在程序中的公共部分提取出来，做成切面类，这样的好处在于，代码的可重用，一旦涉及到该功能的需求发生变化，只要修改该代码就行，否则，你要到处修改，如果只要修改1、2处那还可以接受，万一有1000处呢。&nbsp;</span><br style="font-family: Simsun; font-size: medium; line-height: normal;" /><span style="font-family: Simsun; font-size: medium; line-height: normal;">AOP底层的东西就是JDK动态代理和CGLIB代理，说白了就是增强类的功能。&nbsp;</span><br style="font-family: Simsun; font-size: medium; line-height: normal;" /><span style="font-family: Simsun; font-size: medium; line-height: normal;">最常用的AOP应用在数据库连接以及事务处理上。</span><br /><br /></p><p style="border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px 0px 1.625em; outline: 0px; padding: 0px; vertical-align: baseline; color: #373737; line-height: 24.375px; background-color: #ffffff;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">AOP:面向切面编程。（Aspect-Oriented Programming）</strong><br />AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构，用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候，OOP则显得无能为力。也就是说，OOP允许你定义从上到下的关系，但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中，而与它所散布到的对象的核心功能毫无关系。在OOP设计中，它导致了大量代码的重复，而不利于各个模块的重用。<br />将程序中的交叉业务逻辑（比如安全，日志，事务等），封装成一个切面，然后注入到目标对象（具体业务逻辑）中去。</p><p style="border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px 0px 1.625em; outline: 0px; padding: 0px; vertical-align: baseline; color: #373737; line-height: 24.375px; background-color: #ffffff;">实现AOP的技术，主要分为两大类：一是采用动态代理技术，利用截取消息的方式，对该消息进行装饰，以取代原有对象行为的执行；二是采用静态织入的方式，引入特定的语法创建&#8220;方面&#8221;，从而使得编译器可以在编译期间织入有关&#8220;方面&#8221;的代码.</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px; background-color: #ffffff;"><span style="color: #333333; font-family: Arial; line-height: 26px;">&nbsp;AOP（Aspect Orient Programming），作为面向对象编程的一种补充，广泛应用于处理一些具有横切性质的系统级服务，如事务管理、安全检查、缓存、对象池管理等。 AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理，AOP 代理则可分为静态代理和动态代理两大类，其中静态代理是指使用 AOP 框架提供的命令进行编译，从而在编译阶段就可生成 AOP 代理类，因此也称为编译时增强；而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中"临时"生成 AOP 动态代理类，因此也被称为运行时增强。</span><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/424535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-04-20 02:07 <a href="http://www.blogjava.net/stevenjohn/archive/2015/04/20/424535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring IOC控制反转</title><link>http://www.blogjava.net/stevenjohn/archive/2015/04/15/424435.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 15 Apr 2015 05:36:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/04/15/424435.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/424435.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/04/15/424435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/424435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/424435.html</trackback:ping><description><![CDATA[Spring控制反转(IoC)的理解  <p>Spring框架的核心就是控制反转(Inversion of Control)和依赖注入(Dependency  Injection)，通过这两方面来实现松耦合。</p> <p>使用IoC，对象是被动的接受依赖类，而不是自己主动的去找。容器在实例化的时候主动将它的依赖类注入给它。可以这样理解：控制反转将类的主动权转移到接口上，依赖注入通过xml配置文件在类实例化时将其依赖类注入。<br /><br /></p><div>&nbsp; &nbsp; 依赖类(Dependency)是通过外部(xml)来注入的，而不是由使用它的类(Business)来自己制造，这就是依赖的注入。另一方面，Business对类Dependency的依赖转移到对接口IDependency的依赖，控制权由类转移到了接口，即由"实现"转移到"抽象"中。这就是控制反转。</div><div></div><div>&nbsp;</div><div><div>使用IoC，对象是被动的接受依赖类，而不是自己主动的去找。容器在实例化的时候主动将它的依赖类注入给它。可以这样理解：控制反转将类的主动权转移到接口上，依赖注入通过xml配置文件在类实例化时将其依赖类注入。</div></div><p><span style="padding: 0px; margin: 0px; color: #2c2c2c; line-height: 28px; text-indent: 28px; font-family: 宋体; background-color: #ffffff;">控制反转即</span><span style="padding: 0px; margin: 0px; color: #2c2c2c; font-family: 宋体, 'Arial Narrow', arial, serif; line-height: 28px; text-indent: 28px; background-color: #ffffff;">IoC (Inversion of Control)</span><span style="padding: 0px; margin: 0px; color: #2c2c2c; line-height: 28px; text-indent: 28px; font-family: 宋体; background-color: #ffffff;">，它把传统上由程序代码直接操控的对象的调用权交给容器，通过容器来实现对象组件的装配和管理。所谓的&#8220;控制反转&#8221;概念就是对组件对象控制权的转移，从程序代码本身转移到了外部容器。<br /></span><br /><strong>依赖注入(Dependency Injection)和控制反转(Inversion of  Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例，调用者)需要另一个角色(另一个Java实例，被调用者)的协助时，在传统的程序设计过程中，通常由调用者来创建被调用者的实例。但在Spring里，创建被调用者的工作不再由调用者来完成，因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成，然后注入调用者，因此也称为依赖注入。<br />&nbsp;<wbr>  简而言之：所谓控制反转就是应用本身不负责依赖对象的创建及维护，依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器，控制权的转移就是所谓反转；所谓依赖注入就是指：在运行期，由外部容器动态地将依赖对象注入到组件中。</strong><br /><br /></p><div>传统编程和IoC的对比</div><div></div><div>传统编程：决定使用哪个具体的实现类的控制权在调用类本身，在编译阶段就确定了。</div><div>IoC模式：调用类只依赖接口，而不依赖具体的实现类，减少了耦合。控制权交给了容器，在运行的时候才由容器决定将具体的实现动态的&#8220;注入&#8221;到调用类的对象中。</div><p><br /></p><div class="para" jquery18009304178797832133="335">应用控制反转，对象在被创建的时候，由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说，依赖被注入到对象中。所以，控制反转是，关于一个对象如何获取他所依赖的对象的引用，这个责任的反转。</div><div style="display: inline-block;"></div><p><br /></p><p class="MsoNormal"><span style="font-size: large"><span style="color: #99cc00">IoC核心理念：</span></span></p><p><span style="color: #ff0000">1.在类当中不创建对象，在代码中不直接与对象和服务连接</span></p> <p><span style="color: #ff0000">2.在配置文件中描述创建对象的方式，以及各个组件之间的联系</span></p> <p><span style="color: #ff0000">3.外部容器通过解析配置文件，通过反射来将这些联系在一起</span></p> <p>&nbsp;</p> <p>The Hollywood principle：Don&#8217;t  call us,we&#8217;ll call you.</p> <p>即，所有组件都是被动的、不主动联系（调用）外部代码，</p> <p>要等着外部代码的调用--------所有的组件的初始化和相互调用都由容器负责实现。</p> <p><span style="color: #ff0000">简单的说，就是整个程序之间的关系，都由容器来控制:将程序的控制权反转给容器,就是所谓的外转</span></p> <p>而在我们传统代码中，由程序代码直接控制<br /></p><p><br /></p><div>优缺点：<br />IoC最大的好处是什么？<br />&nbsp;&nbsp;&nbsp;&nbsp;因为把对象生成放在了XML里定义，所以当我们需要换一个实现子类将会变成很简单（一般这样的对象都是实现于某种接口的），只要修改XML就可以了，这样我们甚至可以实现对象的热插拔（有点象USB接口和SCSI硬盘了）。</div><div>IoC最大的缺点是什么？<br />&nbsp;&nbsp;&nbsp;&nbsp;（1）生成一个对象的步骤变复杂了（事实上操作上还是挺简单的），对于不习惯这种方式的人，会觉得有些别扭和不直观。<br />&nbsp;&nbsp;&nbsp;&nbsp;（2）对象生成因为是使用反射编程，在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说，这点损耗是微不足道的，除非某对象的生成对效率要求特别高。<br />&nbsp;&nbsp;&nbsp;&nbsp;（3）缺少IDE重构操作的支持，如果在Eclipse要对类改名，那么你还需要去XML文件里手工去改了，这似乎是所有XML方式的缺憾所在。</div><div></div><p><br /><span style="color: #333333; font-family: Arial; line-height: 26px; font-size: 18px; background-color: #ffffff;"><span style="font-size: 14px;"><strong>&nbsp;</strong>&nbsp;IOC</span></span><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">的意思是控件反转也就是由容器控制程序之间的关系，把控件权交给了外部容器，之前的写法，由程序代码直接操控，而现在控制权由应用代码中转到了外部容器，控制权的转移是所谓反转</span><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">。</span><br /><br /><br /><br /><br /><br /><br /></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/424435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-04-15 13:36 <a href="http://www.blogjava.net/stevenjohn/archive/2015/04/15/424435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ApplicationContext的三种实现方式以及在web.xml配置的两种方式 </title><link>http://www.blogjava.net/stevenjohn/archive/2015/03/27/423888.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 27 Mar 2015 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/03/27/423888.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/423888.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/03/27/423888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/423888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/423888.html</trackback:ping><description><![CDATA[<p>ApplicationContext 是 BeanFactory 接口的子接口，它增强了 BeanFactory 的功能，处于 context 包下。很多时候， ApplicationContext 允许以声明式方式操作容器，无须手动创建。可利用如 ContextLoader 的支持类，在 Web 应用启动时自动创建 ApplicationContext。当然，也可以采用编程方式创建 ApplicationContext。</p><p>ApplicationContext包括BeanFactory的全部功能，因此建议优先使用ApplicationContext。除非对于某些内存非常关键的应用，才考虑使用 BeanFactory。</p><p>spring为ApplicationContext提供的3种实现分别为：</p><p>1、 &nbsp;ClassPathXmlApplicationContext：利用类路径的XML文件来载入Bean定义的信息</p><p>[1]&nbsp; ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");</p><p>[2]&nbsp; String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};</p><p>ApplicationContext ctx = new ClassPathXmlApplication(locations);</p><p>2、 FileSystemXmlApplicationContext：利用文件系统中的XMl文件来载入Bean</p><p>定义的信息</p><p>[1] &nbsp;ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml"); //加载单个配置文件</p><p>[2]&nbsp; String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};</p><p>&nbsp;ApplicationContext ctx = new FileSystemXmlApplicationContext(locations ); </p><p>//加载多个配置文件</p><p>[3]&nbsp; ApplicationContext ctx =new FileSystemXmlApplicationContext("D:/project/bean.xml");</p><p>//根据具体路径加载</p><p>3、 XmlWebApplicationContext：从Web系统中的XML文件来载入Bean定义的信息。</p><p>&nbsp;ServletContext servletContext = request.getSession().getServletContext();&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);</p><p>&nbsp;</p><p>&nbsp;</p><p>配置WebApplicationContext的两种方法：</p><p>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;利用Listener接口来实现</p><p>&lt;listener&gt;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;listener-class&gt;</p><p>org.springframework.web.context.ContextLoaderListener</p><p>&lt;/listener-class&gt;</p><p>&lt;/listener&gt;</p><p>&lt;context-param&gt;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;classpath:applicationContext&lt;/param-value&gt;</p><p>&lt;/context-param&gt;</p><p>（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;利用Servlet接口来实现</p><p>&lt;context-param&gt;</p><p>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p><p>&lt;param-value&gt;classpath:applicationContext&lt;/param-value&gt;</p><p>&lt;/context-param&gt;</p><p>&lt;Servlet&gt;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;context&lt;/servlet-name&gt;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.springframework.web.context.ContextLoaderServlet</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-class&gt;</p><p>&lt;/servlet&gt;</p><img src ="http://www.blogjava.net/stevenjohn/aggbug/423888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-03-27 14:53 <a href="http://www.blogjava.net/stevenjohn/archive/2015/03/27/423888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring Bean 加载顺序</title><link>http://www.blogjava.net/stevenjohn/archive/2015/03/23/423763.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Mon, 23 Mar 2015 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/03/23/423763.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/423763.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/03/23/423763.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/423763.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/423763.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">一，单一Bean</p><ul style="margin: 0px 0px 1.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;"><li style="margin: 0px 0px 0.25em 30px; padding: 0px;">装载</li></ul><p style="margin: 0px; padding: 0px 0px 0px 30px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">1. 实例化;&nbsp;<br />2. 设置属性值;&nbsp;<br />3. 如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name;&nbsp;<br />4. 如果实现BeanFactoryAware接口,调用setBeanFactory 设置BeanFactory;&nbsp;<br />5. 如果实现ApplicationContextAware,调用setApplicationContext设置ApplicationContext&nbsp;<br />6. 调用BeanPostProcessor的预先初始化方法;&nbsp;<br />7. 调用InitializingBean的afterPropertiesSet()方法;&nbsp;<br />8. 调用定制init-method方法；&nbsp;<br />9. 调用BeanPostProcessor的后初始化方法;</p><ul style="margin: 0px 0px 1.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;"><li style="margin: 0px 0px 0.25em 30px; padding: 0px;">spring容器关闭</li></ul><p style="margin: 0px; padding: 0px 0px 0px 30px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">1. 调用DisposableBean的destroy();&nbsp;<br />2. 调用定制的destroy-method方法;</p><p style="margin: 0px; padding: 0px 0px 0px 30px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">二，多个Bean的先后顺序</p><ul style="margin: 0px 0px 1.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;"><li style="margin: 0px 0px 0.25em 30px; padding: 0px;">优先加载BeanPostProcessor的实现Bean</li><li style="margin: 0px 0px 0.25em 30px; padding: 0px;">按Bean文件和Bean的定义顺序按bean的装载顺序（即使加载多个spring文件时存在id覆盖）</li><li style="margin: 0px 0px 0.25em 30px; padding: 0px;">&#8220;设置属性值&#8221;（第2步）时，遇到ref，则在&#8220;实例化&#8221;（第1步）之后先加载ref的id对应的bean</li><li style="margin: 0px 0px 0.25em 30px; padding: 0px;">AbstractFactoryBean的子类，在第6步之后,会调用createInstance方法，之后会调用getObjectType方法</li><li style="margin: 0px 0px 0.25em 30px; padding: 0px;">BeanFactoryUtils类也会改变Bean的加载顺序</li></ul><img src ="http://www.blogjava.net/stevenjohn/aggbug/423763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-03-23 22:10 <a href="http://www.blogjava.net/stevenjohn/archive/2015/03/23/423763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring BeanPostProcessor</title><link>http://www.blogjava.net/stevenjohn/archive/2015/03/23/423759.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Mon, 23 Mar 2015 11:38:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/03/23/423759.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/423759.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/03/23/423759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/423759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/423759.html</trackback:ping><description><![CDATA[<div><strong>1、使用&lt;context:annotation-config /&gt;简化配置&nbsp;<br /></strong><div>&nbsp; &nbsp; &nbsp; Spring2.1添加了一个新的context的Schema命名空间，该命名空间对注释驱动、属性文件引入、加载期织入等功能提供了便捷的配置。我们知道注释本身是不会做任何事情的，它仅提供元数据信息。要使元数据信息真正起作用，必须让负责处理这些元数据的处理器工作起来。&nbsp;</div><div>&nbsp; &nbsp; &nbsp; AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor就是处理这些注释元数据的处理器。但是直接在Spring配置文件中定义这些Bean显得比较笨拙。Spring为我们提供了一种方便的注册这些BeanPostProcessor的方式，这就是&lt;context:annotation-config /&gt;：<br /></div>&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" &nbsp;</div><div>&nbsp; &nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans &nbsp;</div><div>&nbsp; &nbsp; http://www.springframework.org/schema/beans/spring-beans-2.5.xsd &nbsp;</div><div>&nbsp; &nbsp; http://www.springframework.org/schema/context &nbsp;</div><div>&nbsp; &nbsp; http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt; &nbsp;</div><div>&nbsp; &nbsp; &lt;context:annotation-config /&gt; &nbsp;</div><div>&lt;/beans&gt; &nbsp;<br /><br /><div>&lt;context:annotationconfig /&gt;将隐式地向Spring容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor这4个BeanPostProcessor。<br /><br />2、使用&lt;context:component-scan /&gt;让Bean定义注解工作起来<br /><div>&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" &nbsp;</div><div>&nbsp; &nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans &nbsp;</div><div>&nbsp; &nbsp; http://www.springframework.org/schema/beans/spring-beans-2.5.xsd &nbsp;</div><div>&nbsp; &nbsp; http://www.springframework.org/schema/context &nbsp;</div><div>&nbsp; &nbsp; http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt; &nbsp;</div><div>&nbsp; &nbsp; &lt;context:component-scan base-package="com.kedacom.ksoa" /&gt; &nbsp;</div><div>&lt;/beans&gt; &nbsp;</div><br />这里，所有通过&lt;bean&gt;元素定义Bean的配置内容已经被移除，仅需要添加一行&lt;context:component-scan /&gt;配置就解决所有问题了&#8212;&#8212;Spring XML配置文件得到了极致的简化（当然配置元数据还是需要的，只不过以注释形式存在罢了）。&lt;context:component-scan /&gt;的base-package属性指定了需要扫描的类包，类包及其递归子包中所有的类都会被处理。&nbsp;<br />&lt; context:component-scan /&gt;还允许定义过滤器将基包下的某些类纳入或排除。Spring支持以下4种类型的过滤方式：&nbsp;<br />过滤器类型 表达式范例  说明<br /> 注解 org.example.SomeAnnotation将所有使用SomeAnnotation注解的类过滤出来<br /> 类名指定 org.example.SomeClass过滤指定的类<br /> 正则表达式 com\.kedacom\.spring\.annotation\.web\..*通过正则表达式过滤一些类<br />AspectJ表达式 org.example..*Service+通过AspectJ表达式过滤一些类<br /><br /><br /> 以正则表达式为例，我列举一个应用实例：<br /><div>&lt;context:component-scan base-package="com.casheen.spring.annotation"&gt; &nbsp;</div><div>&nbsp; &nbsp; &lt;context:exclude-filter type="regex" expression="com\.casheen\.spring\.annotation\.web\..*" /&gt; &nbsp;</div><div>&lt;/context:component-scan&gt; &nbsp;</div><br />值得注意的是&lt;context:component-scan /&gt;配置项不但启用了对类包进行扫描以实施注释驱动Bean定义的功能，同时还启用了注释驱动自动注入的功能（即还隐式地在内部注册了AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor），因此当使用&lt;context:component-scan /&gt;后，就可以将&lt;context:annotation-config /&gt;移除了.<br /><br /></div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/423759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-03-23 19:38 <a href="http://www.blogjava.net/stevenjohn/archive/2015/03/23/423759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>springMVC jstl</title><link>http://www.blogjava.net/stevenjohn/archive/2013/07/26/402001.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 26 Jul 2013 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/07/26/402001.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/402001.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/07/26/402001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/402001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/402001.html</trackback:ping><description><![CDATA[<div>//spring-mvc.xml<br /></div>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;beans xmlns="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>"<br />&nbsp;xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xmlns:aop="<a href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a>"<br />&nbsp;xmlns:cache="<a href="http://www.springframework.org/schema/cache">http://www.springframework.org/schema/cache</a>"<br />&nbsp;xmlns:context="<a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a>"<br />&nbsp;xmlns:mvc="<a href="http://www.springframework.org/schema/mvc">http://www.springframework.org/schema/mvc</a>" xmlns:oxm="<a href="http://www.springframework.org/schema/oxm">http://www.springframework.org/schema/oxm</a>"<br />&nbsp;xmlns:p="<a href="http://www.springframework.org/schema/p">http://www.springframework.org/schema/p</a>" xmlns:util="<a href="http://www.springframework.org/schema/util">http://www.springframework.org/schema/util</a>"<br />&nbsp;xsi:schemaLocation="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a> <a href="http://www.springframework.org/schema/beans/spring-beans.xsd">http://www.springframework.org/schema/beans/spring-beans.xsd</a>&nbsp; <br />&nbsp;<a href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a> <a href="http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">http://www.springframework.org/schema/aop/spring-aop-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a> <a href="http://www.springframework.org/schema/context/spring-context-3.1.xsd">http://www.springframework.org/schema/context/spring-context-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp; &nbsp;<a href="http://www.springframework.org/schema/mvc">http://www.springframework.org/schema/mvc</a> <a href="http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd</a><br />&nbsp;&nbsp; &nbsp;<a href="http://www.springframework.org/schema/util">http://www.springframework.org/schema/util</a> <a href="http://www.springframework.org/schema/util/spring-util-3.1.xsd">http://www.springframework.org/schema/util/spring-util-3.1.xsd</a>"&gt;<br />&nbsp;&lt;!-- 指定系统寻找controller路径 --&gt;<br />&nbsp;&lt;!-- json 数据格式转换<br />&nbsp;&lt;mvc:annotation-driven&gt;<br />&nbsp;&nbsp;&lt;mvc:message-converters&gt;<br />&nbsp;&nbsp;&nbsp;&lt;bean id="jsonConverter" class="com.abin.lee.ssh.util.json.fastjson.FastjsonHttpMessageConverter"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="supportedMediaTypes" value="application/json" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="serializerFeature"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;WriteMapNullValue&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;QuoteFieldNames&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br />&nbsp;&nbsp;&lt;/mvc:message-converters&gt;</p>
<p>&nbsp;&lt;/mvc:annotation-driven&gt;<br />&nbsp;--&gt;<br />&nbsp;&lt;!-- 搜索的包路径 --&gt;<br />&nbsp;&lt;context:component-scan base-package="com.abin.lee.ssh"<br />&nbsp;&nbsp;use-default-filters="false"&gt;<br />&nbsp;&nbsp;&lt;context:include-filter type="annotation"<br />&nbsp;&nbsp;&nbsp;expression="org.springframework.stereotype.Controller" /&gt;<br />&nbsp;&lt;/context:component-scan&gt;<br />&nbsp;<br />&nbsp;&lt;!-- jsp视图解释器 --&gt;<br />&nbsp;&lt;bean id="jspViewResolver"<br />&nbsp;&nbsp;class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br />&nbsp;&nbsp;&lt;property name="viewClass"<br />&nbsp;&nbsp;&nbsp;value="org.springframework.web.servlet.view.JstlView" /&gt;<br />&nbsp;&nbsp;&lt;property name="prefix" value="/page/" /&gt;<br />&nbsp;&nbsp;&lt;property name="suffix" value=".jsp" /&gt;<br />&nbsp;&lt;/bean&gt;<br />&nbsp;<br />&lt;/beans&gt;</p>
<div><br /><br /><br /><br />//web.xml<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;web-app xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xmlns="<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a>" xmlns:web="<a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</a>" xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a> <a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</a>" id="WebApp_ID" version="2.5"&gt;<br />&nbsp; &lt;display-name&gt;front&lt;/display-name&gt;<br />&nbsp; <br />&nbsp; &nbsp;&lt;!-- spring MVC --&gt;<br />&nbsp;&lt;servlet&gt;<br />&nbsp;&nbsp;&lt;servlet-name&gt;spring-mvc&lt;/servlet-name&gt;<br />&nbsp;&nbsp;&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;<br />&nbsp;&nbsp;&lt;init-param&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param-value&gt;classpath*:spring-mvc.xml&lt;/param-value&gt;<br />&nbsp;&nbsp;&lt;/init-param&gt;<br />&nbsp;&nbsp;&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />&nbsp;&lt;/servlet&gt;<br />&nbsp;&lt;servlet-mapping&gt;<br />&nbsp;&nbsp;&lt;servlet-name&gt;spring-mvc&lt;/servlet-name&gt;<br />&nbsp;&nbsp;&lt;url-pattern&gt;/mvc/*&lt;/url-pattern&gt;<br />&nbsp;&lt;/servlet-mapping&gt;<br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />&nbsp; &lt;welcome-file-list&gt;<br />&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.html&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;<br />&nbsp; &lt;/welcome-file-list&gt;<br />&lt;/web-app&gt;<br /><br /><br /><br /><br /><br />//UnivernalController.java<br /></div>
<p>package com.abin.lee.ssh.controller;</p>
<p>import java.util.ArrayList;<br />import java.util.List;</p>
<p>import org.springframework.context.annotation.Scope;<br />import org.springframework.stereotype.Controller;<br />import org.springframework.ui.ModelMap;<br />import org.springframework.web.bind.annotation.RequestMapping;</p>
<p>import com.abin.lee.ssh.entity.UniversalBean;<br />@Scope("prototype")<br />@Controller<br />@RequestMapping("/sky/")<br />public class UniversalController {<br />&nbsp;<br />&nbsp;@RequestMapping("/activity")<br />&nbsp;public String activity(ModelMap map){<br />&nbsp;&nbsp;List&lt;UniversalBean&gt; list=new ArrayList&lt;UniversalBean&gt;();<br />&nbsp;&nbsp;UniversalBean bean=null;<br />&nbsp;&nbsp;for(int i=0;i&lt;=5;i++){<br />&nbsp;&nbsp;&nbsp;bean=new UniversalBean();<br />&nbsp;&nbsp;&nbsp;bean.setId(i);<br />&nbsp;&nbsp;&nbsp;bean.setName("abin"+i);<br />&nbsp;&nbsp;&nbsp;bean.setImageUrl("<a href="http://localhost:7700/front/%22+i+%22.jpg" href_cetemp='http://localhost:7700/front/"+i+".jpg'>http://localhost:7700/front/"+i+".jpg</a>");<br />&nbsp;&nbsp;&nbsp;list.add(bean);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;map.put("list", list);<br />&nbsp;&nbsp;return "mobile/show";<br />&nbsp;}</p>
<p>}<br /></p>
<div><br /><br /><br />//show.jsp</div>
<div>
<p>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br />&nbsp;&nbsp;&nbsp; pageEncoding="UTF-8"%&gt;<br />&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />&lt;title&gt;Insert title here&lt;/title&gt;<br />&lt;%@ taglib prefix="c" uri="<a href="http://java.sun.com/jsp/jstl/core">http://java.sun.com/jsp/jstl/core</a>" %&gt;<br />&lt;%@ taglib uri="<a href="http://java.sun.com/jsp/jstl/functions">http://java.sun.com/jsp/jstl/functions</a>" prefix="fn"%&gt;<br />&lt;/head&gt;</p>
<p>&lt;script language="javascript" type="text/javascript" src="../script/js/share.js" &gt;&lt;/script&gt;<br />&lt;script type="text/javascript"&gt;</p>
<p>&lt;/script&gt;<br />&lt;body&gt;<br />&nbsp;&lt;div id="content"&gt;<br />&nbsp;&nbsp;&lt;c:forEach items="${list}" var="obj"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;div id="" class="lb"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:choose&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:when test="${empty obj.name}"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I am Empty<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/c:when&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:when test="${obj.name=='abin1'}"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${obj.name} is a boy<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/c:when&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:otherwise&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${obj.name } is normally<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/c:otherwise&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/c:choose&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;img alt="显示不出来" src="${obj.imageUrl }"&gt;&lt;/img&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&lt;/c:forEach&gt;<br />&nbsp;&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/402001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-07-26 15:38 <a href="http://www.blogjava.net/stevenjohn/archive/2013/07/26/402001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 常见要点</title><link>http://www.blogjava.net/stevenjohn/archive/2013/05/29/399919.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 29 May 2013 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/05/29/399919.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/399919.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/05/29/399919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/399919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/399919.html</trackback:ping><description><![CDATA[<p align="left" style="color: #333333; font-family: Arial, Verdana; line-height: 25px;">AOP有三种植入切面的方法：其一是编译期织入，这要求使用特殊的Java编译器，AspectJ是其中的代表者；其二是类装载期织入，而这要求使用特殊的类装载器，AspectJ和AspectWerkz是其中的代表者；其三为动态代理织入，在运行期为目标类添加增强生成子类的方式，Spring AOP采用动态代理织入切面。<br /><br /></p><p align="left" style="color: #333333; font-family: Arial, Verdana; line-height: 25px;">Spring AOP使用了两种代理机制，一种是基于JDK的动态代理，另一种是基于CGLib的动态代理，之所以需要两种代理机制，很大程度上是因为JDK本身只提供基于接口的代理，不支持类的代理。<br /><br /></p><div>Spring的三种注入方式：<br /><div>接口注入（不推荐）</div><div>getter，setter方式注入（比较常用）</div><div>构造器注入（死的应用）<br /><br /><p>什么是AOP？<br />面向切面编程（AOP）完善spring的依赖注入（DI），面向切面编程在spring中主要表现为两个方面<br />1.面向切面编程提供声明式事务管理<br />2.spring支持用户自定义的切面</p><p>面向切面编程（aop）是对面向对象编程（oop）的补充，<br />面向对象编程将程序分解成各个层次的对象，面向切面编程将程序运行过程分解成各个切面。<br />AOP从程序运行角度考虑程序的结构，提取业务处理过程的切面，oop是静态的抽象，aop是动态的抽象，<br />是对应用执行过程中的步骤进行抽象，，从而获得步骤之间的逻辑划分。</p><p>aop框架具有的两个特征：<br />1.各个步骤之间的良好隔离性<br />2.源代码无关性</p><p>什么是DI机制？<br />依赖注入（Dependecy Injection）和控制反转（Inversion of Control）是同一个概念，具体的讲：当某个角色<br />需要另外一个角色协助的时候，在传统的程序设计过程中，通常由调用者来创建被调用者的实例。但在spring中<br />创建被调用者的工作不再由调用者来完成，因此称为控制反转。创建被调用者的工作由spring来完成，然后注入调用者<br />因此也称为依赖注入。<br />spring以动态灵活的方式来管理对象 ， 注入的两种方式，设置注入和构造注入。<br />设置注入的优点：直观，自然<br />构造注入的优点：可以在构造器中决定依赖关系的顺序。</p><p>spring 的优点都有哪些？<br />1.降低了组件之间的耦合性 ，实现了软件各层之间的解耦<br />2.可以使用容易提供的众多服务，如事务管理，消息服务等<br />3.容器提供单例模式支持<br />4.容器提供了AOP技术，利用它很容易实现如权限拦截，运行期监控等功能<br />5.容器提供了众多的辅助类，能加快应用的开发<br />6.spring对于主流的应用框架提供了集成支持，如hibernate，JPA，Struts等<br />7.spring属于低侵入式设计，代码的污染极低<br />8.独立于各种应用服务器<br />9.spring的DI机制降低了业务对象替换的复杂性<br />10.Spring的高度开放性，并不强制应用完全依赖于Spring，开发者可以自由选择spring的部分或全部</p><br /><p>一、spring工作原理：</p><p>1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。<br />2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.<br />3.DispatcherServlet请请求提交到目标Controller<br />4.Controller进行业务逻辑处理后，会返回一个ModelAndView<br />5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象<br />6.视图对象负责渲染返回给客户端。</p><br /><h3><div>描述一下Spring中实现DI（Dependency Injection）的几种方式</div></h3>方式一：接口注入，在实际中得到了普遍应用，即使在IOC的概念尚未确立时，这样的方法也已经频繁出现在我们的代码中。<br />方式二：Type2 IoC: Setter injection对象创建之后，将被依赖对象通过set方法设置进去<br />方式三：Type3 IoC: Constructor injection对象创建时，被依赖对象以构造方法参数的方式注入<br /><br /><span style="font-family: 'Segoe UI', Arial, sans-serif;">&nbsp;简单描述下IOC(inversion of control)的理解</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">一个类需要用到某个接口的方法，我们需要将类A和接口B的实现关联起来，最简单的方法是类A中创建一个对于接口B的实现C的实例，但这种方法显然两者的依赖（Dependency）太大了。而IoC的方法是只在类A中定义好用于关联接口B的实现的方法，将类A，接口B和接口B的实现C放入IoC的 容器（Container）中，通过一定的配置由容器（Container）来实现类A与接口B的实现C的关联。</span><br /><br /><span style="font-family: 'Segoe UI', Arial, sans-serif;">spring提供的事务管理可以分为两类：编程式的和声明式的。编程式的，比较灵活，但是代码量大，存在重复的代码比较多；声明式的比编程式的更灵活。</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">编程式主要使用transactionTemplate。省略了部分的提交，回滚，一系列的事务对象定义，需注入事务管理对象.</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">void add()</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">{</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">transactionTemplate.execute( new TransactionCallback(){</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">pulic Object doInTransaction(TransactionStatus ts)</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">{ //do sth}</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">}</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">}</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">声明式：</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">使用TransactionProxyFactoryBean:</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">围绕Poxy的动态代理 能够自动的提交和回滚事务</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">org.springframework.transaction.interceptor.TransactionProxyFactoryBean</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">PROPAGATION_REQUIRED&#8211;支持当前事务，如果当前没有事务，就新建一个事务。这是最常见的选择。</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">PROPAGATION_SUPPORTS&#8211;支持当前事务，如果当前没有事务，就以非事务方式执行。</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">PROPAGATION_MANDATORY&#8211;支持当前事务，如果当前没有事务，就抛出异常。</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">PROPAGATION_REQUIRES_NEW&#8211;新建事务，如果当前存在事务，把当前事务挂起。</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">PROPAGATION_NOT_SUPPORTED&#8211;以非事务方式执行操作，如果当前存在事务，就把当前事务挂起。</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">PROPAGATION_NEVER&#8211;以非事务方式执行，如果当前存在事务，则抛出异常。</span><br style="font-family: 'Segoe UI', Arial, sans-serif;" /><span style="font-family: 'Segoe UI', Arial, sans-serif;">PROPAGATION_NESTED&#8211;如果当前存在事务，则在嵌套事务内执行。如果当前没有事务，则进行与PROPAGATION_REQUIRED类似的操作。</span><br /><br /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">spring中的核心类有那些，各有什么作用?</span><br style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;" /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">BeanFactory：产生一个新的实例，可以实现单例模式</span><br style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;" /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">BeanWrapper：提供统一的get及set方法</span><br style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;" /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">ApplicationContext:提供框架的实现，包括BeanFactory的所有功能</span><br style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;" /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">spring的ioc及di代表什么意思?</span><br style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;" /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">控制权由代码转向容器，通过容器动态将某些对象加入。</span><br style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;" /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">如何在spring中实现国际化?</span><br style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;" /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">在applicationContext.xml加载一个bean</span><br style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;" /><span style="color: #2e2e2e; font-family: 宋体; font-size: 15px; line-height: 24px; background-color: #f2f9ff;">message.properties是一个键名加键值的文件,</span><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></div><br /></div><p>&nbsp;</p><img src ="http://www.blogjava.net/stevenjohn/aggbug/399919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-05-29 14:37 <a href="http://www.blogjava.net/stevenjohn/archive/2013/05/29/399919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringMVC Spring3 Hibernate3.3全注解</title><link>http://www.blogjava.net/stevenjohn/archive/2012/10/21/389952.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Sat, 20 Oct 2012 17:12:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/10/21/389952.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/389952.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/10/21/389952.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/389952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/389952.html</trackback:ping><description><![CDATA[<div>//web.xml<br />
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;web-app xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br />&nbsp;xmlns="<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a>" xmlns:web="<a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</a>"<br />&nbsp;xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a> <a href="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd</a>"<br />&nbsp;id="WebApp_ID" version="3.0"&gt;<br />&nbsp;&lt;display-name&gt;universal&lt;/display-name&gt;<br />&nbsp;&lt;!-- spring --&gt;<br />&nbsp;&lt;context-param&gt;<br />&nbsp;&nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />&nbsp;&nbsp;&lt;param-value&gt;classpath*:com/abin/lee/ssh/spring-service.xml&lt;/param-value&gt;<br />&nbsp;&lt;/context-param&gt;<br />&nbsp;&lt;listener&gt;<br />&nbsp;&nbsp;&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />&nbsp;&lt;/listener&gt;</p>
<p><br />&nbsp;&lt;!-- spring MVC --&gt;<br />&nbsp;&lt;servlet&gt;<br />&nbsp;&nbsp;&lt;servlet-name&gt;spring-mvc&lt;/servlet-name&gt;<br />&nbsp;&nbsp;&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;<br />&nbsp;&nbsp;&lt;init-param&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param-value&gt;classpath*:com/abin/lee/ssh/spring-mvc.xml&lt;/param-value&gt;<br />&nbsp;&nbsp;&lt;/init-param&gt;<br />&nbsp;&nbsp;&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />&nbsp;&lt;/servlet&gt;<br />&nbsp;&lt;servlet-mapping&gt;<br />&nbsp;&nbsp;&lt;servlet-name&gt;spring-mvc&lt;/servlet-name&gt;<br />&nbsp;&nbsp;&lt;url-pattern&gt;/mvc/*&lt;/url-pattern&gt;<br />&nbsp;&lt;/servlet-mapping&gt;<br />&nbsp;&lt;!-- spring encoding --&gt;<br />&nbsp;&lt;filter&gt;<br />&nbsp;&nbsp;&lt;filter-name&gt;utf8-encoding&lt;/filter-name&gt;<br />&nbsp;&nbsp;&lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;<br />&nbsp;&nbsp;&lt;init-param&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param-name&gt;encoding&lt;/param-name&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param-value&gt;utf-8&lt;/param-value&gt;<br />&nbsp;&nbsp;&lt;/init-param&gt;<br />&nbsp;&nbsp;&lt;init-param&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param-name&gt;forceEncoding&lt;/param-name&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param-value&gt;true&lt;/param-value&gt;<br />&nbsp;&nbsp;&lt;/init-param&gt;<br />&nbsp;&lt;/filter&gt;<br />&nbsp;&lt;filter-mapping&gt;<br />&nbsp;&nbsp;&lt;filter-name&gt;utf8-encoding&lt;/filter-name&gt;<br />&nbsp;&nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&nbsp;&lt;/filter-mapping&gt;</p>
<p>&nbsp;</p>
<p><br />&nbsp;&lt;welcome-file-list&gt;<br />&nbsp;&nbsp;&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&lt;welcome-file&gt;default.html&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;<br />&nbsp;&nbsp;&lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;<br />&nbsp;&lt;/welcome-file-list&gt;<br />&lt;/web-app&gt;</p><br /><br /><br /><br />//spring-mvc.xml<br />
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;beans xmlns="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>"<br />&nbsp;xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xmlns:aop="<a href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a>"<br />&nbsp;xmlns:cache="<a href="http://www.springframework.org/schema/cache">http://www.springframework.org/schema/cache</a>"<br />&nbsp;xmlns:context="<a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a>"<br />&nbsp;xmlns:mvc="<a href="http://www.springframework.org/schema/mvc">http://www.springframework.org/schema/mvc</a>" xmlns:oxm="<a href="http://www.springframework.org/schema/oxm">http://www.springframework.org/schema/oxm</a>"<br />&nbsp;xmlns:p="<a href="http://www.springframework.org/schema/p">http://www.springframework.org/schema/p</a>" xmlns:util="<a href="http://www.springframework.org/schema/util">http://www.springframework.org/schema/util</a>"<br />&nbsp;xsi:schemaLocation="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a> <a href="http://www.springframework.org/schema/beans/spring-beans.xsd">http://www.springframework.org/schema/beans/spring-beans.xsd</a>&nbsp; <br />&nbsp;<a href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a> <a href="http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">http://www.springframework.org/schema/aop/spring-aop-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a> <a href="http://www.springframework.org/schema/context/spring-context-3.1.xsd">http://www.springframework.org/schema/context/spring-context-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp; &nbsp;<a href="http://www.springframework.org/schema/mvc">http://www.springframework.org/schema/mvc</a> <a href="http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd</a><br />&nbsp;&nbsp; &nbsp;<a href="http://www.springframework.org/schema/util">http://www.springframework.org/schema/util</a> <a href="http://www.springframework.org/schema/util/spring-util-3.1.xsd">http://www.springframework.org/schema/util/spring-util-3.1.xsd</a>"&gt;<br />&nbsp;&lt;!-- 指定系统寻找controller路径 --&gt;<br />&nbsp;&lt;mvc:annotation-driven&gt;<br />&nbsp;&nbsp;&lt;!-- json 数据格式转换--&gt;<br />&nbsp;&nbsp;&lt;mvc:message-converters&gt;<br />&nbsp;&nbsp;&nbsp;&lt;bean class="com.abin.lee.ssh.function.FastJsonAbstractHttpMessageConverter"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="supportedMediaTypes" value="application/json" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="serializerFeature"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;WriteMapNullValue&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;QuoteFieldNames&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br />&nbsp;&nbsp;&lt;/mvc:message-converters&gt;</p>
<p>&nbsp;&lt;/mvc:annotation-driven&gt;<br />&nbsp;&lt;!-- 搜索的包路径 --&gt;<br />&nbsp;&lt;context:component-scan base-package="com.abin.lee.ssh"<br />&nbsp;&nbsp;use-default-filters="false"&gt;<br />&nbsp;&nbsp;&lt;context:include-filter type="annotation"<br />&nbsp;&nbsp;&nbsp;expression="org.springframework.stereotype.Controller" /&gt;<br />&nbsp;&lt;/context:component-scan&gt;</p>
<p>&lt;/beans&gt;</p><br /><br /><br /><br />//spring-service.xml<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;beans xmlns="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>"<br />&nbsp;xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xmlns:aop="<a href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a>"<br />&nbsp;xmlns:cache="<a href="http://www.springframework.org/schema/cache">http://www.springframework.org/schema/cache</a>"<br />&nbsp;xmlns:context="<a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a>"<br />&nbsp;xmlns:jdbc="<a href="http://www.springframework.org/schema/jdbc">http://www.springframework.org/schema/jdbc</a>" xmlns:jee="<a href="http://www.springframework.org/schema/jee">http://www.springframework.org/schema/jee</a>"<br />&nbsp;xmlns:jms="<a href="http://www.springframework.org/schema/jms">http://www.springframework.org/schema/jms</a>" xmlns:lang="<a href="http://www.springframework.org/schema/lang">http://www.springframework.org/schema/lang</a>"<br />&nbsp;xmlns:mvc="<a href="http://www.springframework.org/schema/mvc">http://www.springframework.org/schema/mvc</a>" xmlns:oxm="<a href="http://www.springframework.org/schema/oxm">http://www.springframework.org/schema/oxm</a>"<br />&nbsp;xmlns:p="<a href="http://www.springframework.org/schema/p">http://www.springframework.org/schema/p</a>" xmlns:task="<a href="http://www.springframework.org/schema/task">http://www.springframework.org/schema/task</a>"<br />&nbsp;xmlns:tx="<a href="http://www.springframework.org/schema/tx">http://www.springframework.org/schema/tx</a>" xmlns:util="<a href="http://www.springframework.org/schema/util">http://www.springframework.org/schema/util</a>"<br />&nbsp;xsi:schemaLocation="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a> <a href="http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">http://www.springframework.org/schema/beans/spring-beans-3.1.xsd</a> <br />&nbsp;<a href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a> <a href="http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">http://www.springframework.org/schema/aop/spring-aop-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp; &nbsp;<a href="http://www.springframework.org/schema/cache">http://www.springframework.org/schema/cache</a> <a href="http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">http://www.springframework.org/schema/cache/spring-cache-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a> <a href="http://www.springframework.org/schema/context/spring-context-3.1.xsd">http://www.springframework.org/schema/context/spring-context-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.springframework.org/schema/jdbc">http://www.springframework.org/schema/jdbc</a> <a href="http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd">http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.springframework.org/schema/jee">http://www.springframework.org/schema/jee</a> <a href="http://www.springframework.org/schema/jee/spring-jee-3.1.xsd">http://www.springframework.org/schema/jee/spring-jee-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.springframework.org/schema/jms">http://www.springframework.org/schema/jms</a> <a href="http://www.springframework.org/schema/jms/spring-jms-3.1.xsd">http://www.springframework.org/schema/jms/spring-jms-3.1.xsd</a>&nbsp; <br />&nbsp; &nbsp;<a href="http://www.springframework.org/schema/lang">http://www.springframework.org/schema/lang</a> <a href="http://www.springframework.org/schema/lang/spring-lang-3.1.xsd">http://www.springframework.org/schema/lang/spring-lang-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp; &nbsp;<a href="http://www.springframework.org/schema/mvc">http://www.springframework.org/schema/mvc</a> <a href="http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd</a>&nbsp; <br />&nbsp; &nbsp;<a href="http://www.springframework.org/schema/oxm">http://www.springframework.org/schema/oxm</a> <a href="http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd">http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;<a href="http://www.springframework.org/schema/task">http://www.springframework.org/schema/task</a> <a href="http://www.springframework.org/schema/task/spring-task-3.1.xsd">http://www.springframework.org/schema/task/spring-task-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.springframework.org/schema/tx">http://www.springframework.org/schema/tx</a> <a href="http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">http://www.springframework.org/schema/tx/spring-tx-3.1.xsd</a>&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.springframework.org/schema/util">http://www.springframework.org/schema/util</a> <a href="http://www.springframework.org/schema/util/spring-util-3.1.xsd">http://www.springframework.org/schema/util/spring-util-3.1.xsd</a>"&gt;<br />&nbsp;<br />&nbsp;&lt;context:annotation-config /&gt;<br />&nbsp;&lt;context:component-scan base-package="com.abin.lee.ssh"&gt;&lt;/context:component-scan&gt;<br />&nbsp;<br />&nbsp;&lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destroy-method="close"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;property name="user" value="abin"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;property name="password" value="abin"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&lt;/bean&gt; <br />&nbsp;<br />&nbsp;&lt;bean id="sessionFactory"<br />&nbsp;&nbsp;class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt;<br />&nbsp;&nbsp;&lt;property name="dataSource"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;ref bean="dataSource" /&gt;<br />&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp;&lt;property name="hibernateProperties"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;props&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.dialect"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.hibernate.dialect.OracleDialect<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/prop&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.show_sql"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/prop&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.format_sql"&gt;true&lt;/prop&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.hbm2ddl.auto"&gt;update&lt;/prop&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/props&gt;<br />&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp;&lt;!--主键Bean类<br />&nbsp;&nbsp;&lt;property name="annotatedClasses"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;com.abin.lee.ssh.entity.ModeBean&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp; --&gt;<br />&nbsp;&nbsp;&lt;!-- 自动扫描--&gt;<br />&nbsp;&nbsp; &lt;property name="packagesToScan" value="com.abin.lee.ssh.entity" /&gt; <br />&nbsp;&lt;/bean&gt;<br />&nbsp;<br />&nbsp;&lt;!-- 配置事务管理器 --&gt;<br />&nbsp;&lt;bean id="transactionManager"<br />&nbsp;&nbsp;class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;<br />&nbsp;&nbsp;&lt;property name="sessionFactory"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;ref bean="sessionFactory" /&gt;<br />&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&lt;/bean&gt;<br />&nbsp;<br />&nbsp;&lt;!-- 配置注解实现管理事务（cglib：proxy-target-class="true"） --&gt;<br />&nbsp;&lt;tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /&gt;<br />&nbsp;&lt;!-- 指定使用cglib --&gt;<br />&nbsp;&lt;!--&nbsp;&nbsp; --&gt;<br />&nbsp;&lt;aop:aspectj-autoproxy proxy-target-class="true" /&gt;<br />&nbsp;<br />&nbsp;&lt;!-- 配置事务的传播特性 --&gt;<br />&nbsp;&lt;tx:advice id="txAdvice" transaction-manager="transactionManager"&gt;<br />&nbsp;&nbsp;&lt;tx:attributes&gt;<br />&nbsp;&nbsp;&nbsp;&lt;tx:method name="save*" propagation="REQUIRED" /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;tx:method name="insert*" propagation="REQUIRED" /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;tx:method name="update*" propagation="REQUIRED" /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;tx:method name="delete*" propagation="REQUIRED" /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;tx:method name="*" read-only="false" /&gt;<br />&nbsp;&nbsp;&lt;/tx:attributes&gt;<br />&nbsp;&lt;/tx:advice&gt;<br />&nbsp;<br />&nbsp;&lt;!-- 那些类的哪些方法参与事务--&gt;<br />&nbsp;&lt;aop:config&gt;<br />&nbsp;&nbsp;&lt;aop:pointcut id="allServiceMethod" expression="execution(* com.abin.lee.ssh.spring.*.*(..))" /&gt;<br />&nbsp;&nbsp;&lt;aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" /&gt;<br />&nbsp;&lt;/aop:config&gt;<br />&nbsp; <br />&lt;/beans&gt;<br /><br /><br /><br />//FastJsonAbstractHttpMessageConverter.java<br />
<p>package com.abin.lee.ssh.function;</p>
<p>import java.io.IOException;<br />import java.io.InputStreamReader;<br />import java.io.OutputStream;<br />import java.net.URLDecoder;<br />import java.nio.charset.Charset;</p>
<p>import org.springframework.http.HttpInputMessage;<br />import org.springframework.http.HttpOutputMessage;<br />import org.springframework.http.MediaType;<br />import org.springframework.http.converter.AbstractHttpMessageConverter;<br />import org.springframework.http.converter.HttpMessageNotReadableException;<br />import org.springframework.http.converter.HttpMessageNotWritableException;<br />import org.springframework.util.FileCopyUtils;</p>
<p>import com.alibaba.fastjson.JSON;<br />import com.alibaba.fastjson.serializer.SerializerFeature;</p>
<p>//来对requestbody 或responsebody中的数据进行解析<br />public class FastJsonAbstractHttpMessageConverter extends AbstractHttpMessageConverter&lt;Object&gt;{<br />&nbsp; public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");<br />&nbsp;// fastjson特性参数&nbsp; <br />&nbsp;&nbsp;&nbsp; private SerializerFeature[] serializerFeature;&nbsp; <br />&nbsp; <br />&nbsp;&nbsp;&nbsp; public SerializerFeature[] getSerializerFeature() {&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return serializerFeature;&nbsp; <br />&nbsp;&nbsp;&nbsp; }&nbsp; <br />&nbsp; <br />&nbsp;&nbsp;&nbsp; public void setSerializerFeature(SerializerFeature[] serializerFeature) {&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.serializerFeature = serializerFeature;&nbsp; <br />&nbsp;&nbsp;&nbsp; }&nbsp; <br />&nbsp; <br />&nbsp;//限定页面文本传送类型 只有数据是改类型 的 才会进行拦截<br />&nbsp;//application/json<br />&nbsp;public FastJsonAbstractHttpMessageConverter(){<br />//&nbsp;&nbsp;super(new MediaType("text","plain"));<br />&nbsp;&nbsp;super(new MediaType("application","json"));<br />&nbsp;}<br />&nbsp;@Override<br />&nbsp;protected Object readInternal(Class&lt;? extends Object&gt; clazz, HttpInputMessage inputmessage) throws IOException,<br />&nbsp;&nbsp;&nbsp;HttpMessageNotReadableException {<br />&nbsp;&nbsp;Charset charset;<br />&nbsp;&nbsp;MediaType mediaType=inputmessage.getHeaders().getContentType();<br />&nbsp;&nbsp;if(mediaType!=null&amp;&amp;mediaType.getCharSet()!=null){<br />&nbsp;&nbsp;&nbsp;charset=mediaType.getCharSet();<br />&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;charset=Charset.forName("UTF-8");<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;String input=FileCopyUtils.copyToString(new InputStreamReader(inputmessage.getBody(),charset));<br />&nbsp;&nbsp;String result=URLDecoder.decode(input, "UTF-8");<br />&nbsp;&nbsp;System.out.println(result);<br />&nbsp;&nbsp;/*OrgnizationPO po=new OrgnizationPO();<br />&nbsp;&nbsp;po.setId(1);<br />&nbsp;&nbsp;po.setName("11");<br />&nbsp;&nbsp;po.setOrgdesc("1");*/<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;/*ByteArrayOutputStream baos = new ByteArrayOutputStream();&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((i = inputmessage.getBody().read()) != -1) {&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baos.write(i);&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return JSON.parseObject(result, clazz);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return JSON.parseArray(baos.toString(), clazz);<br />//&nbsp;&nbsp;return po;<br />&nbsp;}</p>
<p>&nbsp;@Override<br />&nbsp;protected boolean supports(Class&lt;?&gt; clazz) {<br />&nbsp;&nbsp;return true;<br />&nbsp;&nbsp;//throw new UnsupportedOperationException();<br />&nbsp;}</p>
<p>&nbsp;@Override<br />&nbsp;protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException,<br />&nbsp;&nbsp;&nbsp;HttpMessageNotWritableException {<br />&nbsp;&nbsp;String jsonString = JSON.toJSONString(o, serializerFeature);&nbsp; <br />//&nbsp;&nbsp;System.out.println(jsonString);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputStream out = outputMessage.getBody();&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(jsonString.getBytes(DEFAULT_CHARSET));&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.flush();&nbsp; <br />&nbsp;}</p>
<p>}<br /></p><br /><br /><br /><br /><br />
<p>package com.abin.lee.ssh.hibernate;</p>
<p>import com.abin.lee.ssh.entity.ModeBean;</p>
<p>public interface ModeDao {<br />&nbsp;public boolean insert(ModeBean mode);<br />}<br /></p><br /><br /><br />
<p>package com.abin.lee.ssh.hibernate.impl;</p>
<p>import javax.annotation.Resource;</p>
<p>import org.hibernate.SessionFactory;<br />import org.springframework.orm.hibernate3.support.HibernateDaoSupport;<br />import org.springframework.stereotype.Repository;</p>
<p>import com.abin.lee.ssh.entity.ModeBean;<br />import com.abin.lee.ssh.hibernate.ModeDao;<br />@Repository<br />public class ModeDaoImpl extends HibernateDaoSupport implements ModeDao{<br />&nbsp;<br />&nbsp;@Resource(name = "sessionFactory")<br />&nbsp;public void setSuperSessionFactory(SessionFactory sessionFactory) {<br />&nbsp;&nbsp;super.setSessionFactory(sessionFactory);<br />&nbsp;}<br />&nbsp;<br />&nbsp;public boolean insert(ModeBean mode) {<br />&nbsp;&nbsp;boolean flag=false;<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;this.getHibernateTemplate().saveOrUpdate(mode);<br />&nbsp;&nbsp;&nbsp;flag=true;<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return flag;<br />&nbsp;}<br />&nbsp;<br />&nbsp;<br />}<br /></p><br /><br /><br /><br /><br />
<p>package com.abin.lee.ssh.spring;</p>
<p>import com.abin.lee.ssh.entity.ModeBean;</p>
<p>public interface ModeService {<br />&nbsp;public boolean insert(ModeBean mode);</p>
<p>}<br /></p><br /><br /><br /><br />
<p>package com.abin.lee.ssh.spring.impl;</p>
<p>import javax.annotation.Resource;</p>
<p>import org.springframework.stereotype.Service;<br />import org.springframework.transaction.annotation.Isolation;<br />import org.springframework.transaction.annotation.Propagation;<br />import org.springframework.transaction.annotation.Transactional;</p>
<p>import com.abin.lee.ssh.entity.ModeBean;<br />import com.abin.lee.ssh.hibernate.ModeDao;<br />import com.abin.lee.ssh.spring.ModeService;</p>
<p>@Service<br />@Transactional(readOnly = true, timeout = 2, propagation = Propagation.SUPPORTS, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)<br />public class ModeServiceImpl implements ModeService {<br />&nbsp;@Resource<br />&nbsp;private ModeDao modeDao;</p>
<p>&nbsp;@Transactional(readOnly = false, propagation = Propagation.REQUIRED)<br />&nbsp;public boolean insert(ModeBean mode) {<br />&nbsp;&nbsp;boolean flag = false;<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;flag = this.modeDao.insert(mode);<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return flag;<br />&nbsp;}</p>
<p>}<br /></p><br /><br /><br /><br /><br />
<p>package com.abin.lee.ssh.springmvc;</p>
<p>import javax.annotation.Resource;</p>
<p>import org.springframework.stereotype.Controller;<br />import org.springframework.web.bind.annotation.ModelAttribute;<br />import org.springframework.web.bind.annotation.RequestMapping;<br />import org.springframework.web.bind.annotation.RequestMethod;<br />import org.springframework.web.bind.annotation.ResponseBody;</p>
<p>import com.abin.lee.ssh.dto.request.ModeRequest;<br />import com.abin.lee.ssh.dto.response.ModeResponse;<br />import com.abin.lee.ssh.entity.ModeBean;<br />import com.abin.lee.ssh.spring.ModeService;</p>
<p>@Controller<br />@RequestMapping("/stevenjohn/")<br />public class ModeController {<br />&nbsp;@Resource<br />&nbsp;private ModeService modeService;</p>
<p>&nbsp;@RequestMapping(value = "getMode", method = RequestMethod.POST)<br />&nbsp;public @ResponseBody<br />&nbsp;ModeResponse getMode(<br />&nbsp;&nbsp;&nbsp;@ModelAttribute ModeRequest modeRequest) {<br />&nbsp;&nbsp;ModeResponse response = new ModeResponse();<br />&nbsp;&nbsp;String id=modeRequest.getId();<br />&nbsp;&nbsp;String username=modeRequest.getUsername();<br />&nbsp;&nbsp;String password=modeRequest.getPassword();<br />&nbsp;&nbsp;int age=modeRequest.getAge();<br />&nbsp;&nbsp;String address=modeRequest.getAddress();<br />&nbsp;&nbsp;String email=modeRequest.getEmail();<br />&nbsp;&nbsp;ModeBean mode=new ModeBean(id, username, password, age, address, email);<br />&nbsp;&nbsp;boolean flag=modeService.insert(mode);<br />&nbsp;&nbsp;System.out.println("flag="+flag);<br />&nbsp;&nbsp;if(flag==true){<br />&nbsp;&nbsp;&nbsp;response.setStatus("success");<br />&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;response.setStatus("failure");<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;return response;<br />&nbsp;}<br />}<br /></p><br /><br /><br />
<p>package com.abin.lee.ssh.entity;</p>
<p>import java.io.Serializable;</p>
<p>import javax.persistence.Column;<br />import javax.persistence.Entity;<br />import javax.persistence.Id;<br />import javax.persistence.Table;<br />@Entity<br />@Table(name="MODEBEAN")<br />public class ModeBean implements Serializable{<br />&nbsp;@Id<br />&nbsp;@Column(name="ID")<br />&nbsp;private String id;<br />&nbsp;@Column(name="USERNAME",length=100,nullable=true)<br />&nbsp;private String username;<br />&nbsp;@Column(name="PASSWORD",length=100,nullable=true)<br />&nbsp;private String password;<br />&nbsp;@Column(name="AGE",length=10,nullable=true)<br />&nbsp;private int age;<br />&nbsp;@Column(name="ADDRESS",length=100,nullable=true)<br />&nbsp;private String address;<br />&nbsp;@Column(name="EMAIL",length=100,nullable=true)<br />&nbsp;private String email;<br />&nbsp;public ModeBean() {<br />&nbsp;}<br />&nbsp;public ModeBean(String id, String username, String password, int age,<br />&nbsp;&nbsp;&nbsp;String address, String email) {<br />&nbsp;&nbsp;super();<br />&nbsp;&nbsp;this.id = id;<br />&nbsp;&nbsp;this.username = username;<br />&nbsp;&nbsp;this.password = password;<br />&nbsp;&nbsp;this.age = age;<br />&nbsp;&nbsp;this.address = address;<br />&nbsp;&nbsp;this.email = email;<br />&nbsp;}<br />&nbsp;<br />&nbsp;public String getId() {<br />&nbsp;&nbsp;return id;<br />&nbsp;}<br />&nbsp;public void setId(String id) {<br />&nbsp;&nbsp;this.id = id;<br />&nbsp;}<br />&nbsp;public String getUsername() {<br />&nbsp;&nbsp;return username;<br />&nbsp;}<br />&nbsp;public void setUsername(String username) {<br />&nbsp;&nbsp;this.username = username;<br />&nbsp;}<br />&nbsp;public String getPassword() {<br />&nbsp;&nbsp;return password;<br />&nbsp;}<br />&nbsp;public void setPassword(String password) {<br />&nbsp;&nbsp;this.password = password;<br />&nbsp;}<br />&nbsp;public int getAge() {<br />&nbsp;&nbsp;return age;<br />&nbsp;}<br />&nbsp;public void setAge(int age) {<br />&nbsp;&nbsp;this.age = age;<br />&nbsp;}<br />&nbsp;public String getAddress() {<br />&nbsp;&nbsp;return address;<br />&nbsp;}<br />&nbsp;public void setAddress(String address) {<br />&nbsp;&nbsp;this.address = address;<br />&nbsp;}<br />&nbsp;public String getEmail() {<br />&nbsp;&nbsp;return email;<br />&nbsp;}<br />&nbsp;public void setEmail(String email) {<br />&nbsp;&nbsp;this.email = email;<br />&nbsp;}<br />&nbsp;<br />&nbsp;<br />}<br /></p><br /><br /><br /><br /><br /><br />//SpringMVC请求参数<br />
<p>package com.abin.lee.ssh.dto.request;</p>
<p>import java.io.Serializable;</p>
<p>public class ModeRequest implements Serializable{<br />&nbsp;/**<br />&nbsp; * <br />&nbsp; */<br />&nbsp;private static final long serialVersionUID = 1886596479119297989L;<br />&nbsp;private String id;<br />&nbsp;private String username;<br />&nbsp;private String password;<br />&nbsp;private int age;<br />&nbsp;private String address;<br />&nbsp;private String email;<br />&nbsp;public String getId() {<br />&nbsp;&nbsp;return id;<br />&nbsp;}<br />&nbsp;public void setId(String id) {<br />&nbsp;&nbsp;this.id = id;<br />&nbsp;}<br />&nbsp;public String getUsername() {<br />&nbsp;&nbsp;return username;<br />&nbsp;}<br />&nbsp;public void setUsername(String username) {<br />&nbsp;&nbsp;this.username = username;<br />&nbsp;}<br />&nbsp;public String getPassword() {<br />&nbsp;&nbsp;return password;<br />&nbsp;}<br />&nbsp;public void setPassword(String password) {<br />&nbsp;&nbsp;this.password = password;<br />&nbsp;}<br />&nbsp;public int getAge() {<br />&nbsp;&nbsp;return age;<br />&nbsp;}<br />&nbsp;public void setAge(int age) {<br />&nbsp;&nbsp;this.age = age;<br />&nbsp;}<br />&nbsp;public String getAddress() {<br />&nbsp;&nbsp;return address;<br />&nbsp;}<br />&nbsp;public void setAddress(String address) {<br />&nbsp;&nbsp;this.address = address;<br />&nbsp;}<br />&nbsp;public String getEmail() {<br />&nbsp;&nbsp;return email;<br />&nbsp;}<br />&nbsp;public void setEmail(String email) {<br />&nbsp;&nbsp;this.email = email;<br />&nbsp;}<br />&nbsp;<br />}<br /></p><br /><br /><br /><br />//SpringMVC响应参数<br /><br /><br />
<p>package com.abin.lee.ssh.dto.response;</p>
<p>import java.io.Serializable;</p>
<p>public class ModeResponse implements Serializable{<br />&nbsp;/**<br />&nbsp; * <br />&nbsp; */<br />&nbsp;private static final long serialVersionUID = 7725619232731203410L;<br />&nbsp;private String status;<br />&nbsp;private String message;<br />&nbsp;public ModeResponse() {<br />&nbsp;}<br />&nbsp;public ModeResponse(String status, String message) {<br />&nbsp;&nbsp;super();<br />&nbsp;&nbsp;this.status = status;<br />&nbsp;&nbsp;this.message = message;<br />&nbsp;}<br />&nbsp;public String getStatus() {<br />&nbsp;&nbsp;return status;<br />&nbsp;}<br />&nbsp;public void setStatus(String status) {<br />&nbsp;&nbsp;this.status = status;<br />&nbsp;}<br />&nbsp;public String getMessage() {<br />&nbsp;&nbsp;return message;<br />&nbsp;}<br />&nbsp;public void setMessage(String message) {<br />&nbsp;&nbsp;this.message = message;<br />&nbsp;}<br />&nbsp;<br />}<br /></p><br /><br /><br />//log4j.properties<br />
<p>log4j.rootCategory=info,log,console</p>
<p>log4j.logger.org.apache.axis2.enterprise=FATAL<br />log4j.logger.de.hunsicker.jalopy.io=FATAL<br />log4j.logger.httpclient.wire.header=FATAL<br />log4j.logger.org.apache.commons.httpclient=FATAL</p>
<p>log4j.appender.console=org.apache.log4j.ConsoleAppender<br />log4j.appender.console.layout=org.apache.log4j.PatternLayout<br />log4j.appender.console.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n<br />&nbsp;<br />log4j.appender.log=org.apache.log4j.DailyRollingFileAppender<br />log4j.appender.log.File=../logs/mms.log<br />log4j.appender.log.layout=org.apache.log4j.PatternLayout<br />log4j.appender.log.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n</p><br /><br /><br /><br /><br /><br /><br />//测试springMVC的Junit4+httpClient类：<br />
<p>package com.abin.lee.ssm;</p>
<p>import java.io.BufferedReader;<br />import java.io.InputStreamReader;<br />import java.util.ArrayList;<br />import java.util.List;<br />import java.util.UUID;</p>
<p>import junit.framework.TestCase;</p>
<p>import org.apache.http.HttpResponse;<br />import org.apache.http.NameValuePair;<br />import org.apache.http.client.HttpClient;<br />import org.apache.http.client.entity.UrlEncodedFormEntity;<br />import org.apache.http.client.methods.HttpPost;<br />import org.apache.http.impl.client.DefaultHttpClient;<br />import org.apache.http.message.BasicNameValuePair;<br />import org.apache.http.protocol.HTTP;<br />import org.junit.Test;</p>
<p>public class HttpsClient extends TestCase {<br />&nbsp;private String httpUrl = "<a href="http://localhost:7000/universal/mvc/stevenjohn/getMode">http://localhost:7000/universal/mvc/stevenjohn/getMode</a>";</p>
<p>&nbsp;@Test<br />&nbsp;public void testHttpsClient() {<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;HttpClient httpClient = new DefaultHttpClient();<br />&nbsp;&nbsp;&nbsp;HttpPost httpPost = new HttpPost(httpUrl);<br />&nbsp;&nbsp;&nbsp;List&lt;NameValuePair&gt; nvps = new ArrayList&lt;NameValuePair&gt;();<br />&nbsp;&nbsp;&nbsp;nvps.add(new BasicNameValuePair("id", UUID.randomUUID().toString()));<br />&nbsp;&nbsp;&nbsp;nvps.add(new BasicNameValuePair("username", "abin"));<br />&nbsp;&nbsp;&nbsp;nvps.add(new BasicNameValuePair("password", "abing"));<br />&nbsp;&nbsp;&nbsp;nvps.add(new BasicNameValuePair("age", "28"));<br />&nbsp;&nbsp;&nbsp;nvps.add(new BasicNameValuePair("address", "beijing of china"));<br />&nbsp;&nbsp;&nbsp;nvps.add(new BasicNameValuePair("email", "<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#118;&#97;&#114;&#121;&#97;&#108;&#108;&#64;&#116;&#111;&#109;&#46;&#99;&#111;&#109;">varyall@tom.com</a>"));<br />&nbsp;&nbsp;&nbsp;httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));<br />&nbsp;&nbsp;&nbsp;HttpResponse httpResponse = httpClient.execute(httpPost);<br />&nbsp;&nbsp;&nbsp;BufferedReader buffer = new BufferedReader(new InputStreamReader(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpResponse.getEntity().getContent()));<br />&nbsp;&nbsp;&nbsp;StringBuffer stb=new StringBuffer();<br />&nbsp;&nbsp;&nbsp;String line=null;<br />&nbsp;&nbsp;&nbsp;while((line=buffer.readLine())!=null){<br />&nbsp;&nbsp;&nbsp;&nbsp;stb.append(line);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;buffer.close();<br />&nbsp;&nbsp;&nbsp;String result=stb.toString();<br />&nbsp;&nbsp;&nbsp;System.out.println("result="+result);<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>}<br /></p></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/389952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-10-21 01:12 <a href="http://www.blogjava.net/stevenjohn/archive/2012/10/21/389952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cxf spring集成(二)</title><link>http://www.blogjava.net/stevenjohn/archive/2012/08/21/385926.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Tue, 21 Aug 2012 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/08/21/385926.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/385926.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/08/21/385926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/385926.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/385926.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html">五、CXF WebService整合Spring</a></h1>
<div id="cnblogs_post_body">
<p>首先，CXF和spring整合需要准备如下jar包文件： </p>
<p><a href="http://images.cnblogs.com/cnblogs_com/hoojo/201103/201103301049065256.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201103/201103301049097368.png" width="227" height="244" /></a> </p>
<p>这边我是用Spring的jar包是Spring官方提供的，并没有使用CXF中的Spring的jar文件。 </p>
<p>添加这么多文件后，首先在web.xml中添加如下配置： </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #008000">&lt;!-- 加载Spring容器配置 --&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span>org.springframework.web.context.ContextLoaderListener<span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #008000">&lt;!-- 设置Spring容器加载配置文件路径 --&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">context-param</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span>contextConfigLocation<span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span>classpath*:applicationContext-server.xml<span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;/</span><span style="color: #800000">context-param</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span>org.springframework.web.util.IntrospectorCleanupListener<span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span>CXFService<span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span>org.apache.cxf.transport.servlet.CXFServlet<span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span>CXFService<span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span>/*<span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div>
<p>然后在src目录中，新建一个applicationContext-server.xml文件，文件内容如下： </p>
<p>&nbsp; </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="UTF-8"</span>?<span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span></pre><!--CRLF--><pre>    <span style="color: #ff0000">xmlns:context</span><span style="color: #0000ff">="http://www.springframework.org/schema/context"</span></pre><!--CRLF--><pre>    <strong><span style="text-decoration: underline"><span style="color: #ff0000">xmlns:jaxws</span><span style="color: #0000ff">="http://cxf.apache.org/jaxws"</span></span></strong></pre><!--CRLF--><pre>    <span style="color: #ff0000">xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span></pre><!--CRLF--><pre>    <span style="color: #ff0000">xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans </span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd</pre><!--CRLF--><pre>    http://www.springframework.org/schema/context</pre><!--CRLF--><pre>    http://www.springframework.org/schema/context/spring-context-3.0.xsd</pre><!--CRLF--><pre>    <span style="text-decoration: underline"><strong>http://cxf.apache.org/jaxws</strong></span> </pre><!--CRLF--><pre>    <strong><span style="text-decoration: underline">http://cxf.apache.org/schemas/jaxws.xsd</span></strong>"</pre><!--CRLF--></div></div>
<p>注意上面的带下划线加粗部分，这个很重要的哦！不能写错或是遗漏了。 </p>
<p>添加完这个文件后，还需要在这个文件中导入这么几个文件。文件内容如下： </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">import</span> <span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf.xml"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">import</span> <span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf-extension-soap.xml"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">import</span> <span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf-servlet.xml"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--></div></div>
<p>下面开始写服务器端代码，首先定制服务器端的接口，代码如下： </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #0000ff">package</span> com.hoo.service;</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> javax.jws.WebParam;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> javax.jws.WebService;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> javax.jws.soap.SOAPBinding;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> javax.jws.soap.SOAPBinding.Style;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> com.hoo.entity.User;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> com.hoo.entity.Users;</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #008000">/**</span></pre><!--CRLF--><pre><span style="color: #008000"> * &lt;b&gt;function:&lt;/b&gt;定制客户端请求WebService所需要的接口</span></pre><!--CRLF--><pre><span style="color: #008000"> * @author hoojo</span></pre><!--CRLF--><pre><span style="color: #008000"> * @createDate 2011-3-18 上午08:22:55</span></pre><!--CRLF--><pre><span style="color: #008000"> * @file ComplexUserService.java</span></pre><!--CRLF--><pre><span style="color: #008000"> * @package com.hoo.service</span></pre><!--CRLF--><pre><span style="color: #008000"> * @project CXFWebService</span></pre><!--CRLF--><pre><span style="color: #008000"> * @blog http://blog.csdn.net/IBM_hoojo</span></pre><!--CRLF--><pre><span style="color: #008000"> * @email hoojo_@126.com</span></pre><!--CRLF--><pre><span style="color: #008000"> * @version 1.0</span></pre><!--CRLF--><pre><span style="color: #008000"> */</span></pre><!--CRLF--><pre>@WebService</pre><!--CRLF--><pre>@SOAPBinding(style = Style.RPC)</pre><!--CRLF--><pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> IComplexUserService {</pre><!--CRLF--><pre>    </pre><!--CRLF--><pre>    <span style="color: #0000ff">public</span> User getUserByName(@WebParam(name = <span style="color: #006080">"name"</span>) String name);</pre><!--CRLF--><pre>    </pre><!--CRLF--><pre>    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> setUser(User user);</pre><!--CRLF--><pre>}</pre><!--CRLF--></div></div>
<p>下面编写WebService的实现类，服务器端实现代码如下： </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #0000ff">package</span> com.hoo.service;</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> java.util.ArrayList;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> java.util.Date;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> java.util.HashMap;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> java.util.List;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> javax.jws.WebParam;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> javax.jws.WebService;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> javax.jws.soap.SOAPBinding;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> javax.jws.soap.SOAPBinding.Style;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> com.hoo.entity.User;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> com.hoo.entity.Users;</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #008000">/**</span></pre><!--CRLF--><pre><span style="color: #008000"> * &lt;b&gt;function:&lt;/b&gt; WebService传递复杂对象，如JavaBean、Array、List、Map等</span></pre><!--CRLF--><pre><span style="color: #008000"> * @author hoojo</span></pre><!--CRLF--><pre><span style="color: #008000"> * @createDate 2011-3-18 上午08:22:55</span></pre><!--CRLF--><pre><span style="color: #008000"> * @file ComplexUserService.java</span></pre><!--CRLF--><pre><span style="color: #008000"> * @package com.hoo.service</span></pre><!--CRLF--><pre><span style="color: #008000"> * @project CXFWebService</span></pre><!--CRLF--><pre><span style="color: #008000"> * @blog http://blog.csdn.net/IBM_hoojo</span></pre><!--CRLF--><pre><span style="color: #008000"> * @email hoojo_@126.com</span></pre><!--CRLF--><pre><span style="color: #008000"> * @version 1.0</span></pre><!--CRLF--><pre><span style="color: #008000"> */</span></pre><!--CRLF--><pre>@WebService</pre><!--CRLF--><pre>@SOAPBinding(style = Style.RPC)</pre><!--CRLF--><pre>@SuppressWarnings(<span style="color: #006080">"deprecation"</span>)</pre><!--CRLF--><pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ComplexUserService <span style="color: #0000ff">implements</span> IComplexUserService {</pre><!--CRLF--><pre>    </pre><!--CRLF--><pre>    <span style="color: #0000ff">public</span> User getUserByName(@WebParam(name = <span style="color: #006080">"name"</span>) String name) {</pre><!--CRLF--><pre>        User user = <span style="color: #0000ff">new</span> User();</pre><!--CRLF--><pre>        user.setId(<span style="color: #0000ff">new</span> Date().getSeconds());</pre><!--CRLF--><pre>        user.setName(name);</pre><!--CRLF--><pre>        user.setAddress(<span style="color: #006080">"china"</span>);</pre><!--CRLF--><pre>        user.setEmail(name + <span style="color: #006080">"@hoo.com"</span>);</pre><!--CRLF--><pre>        <span style="color: #0000ff">return</span> user;</pre><!--CRLF--><pre>    }</pre><!--CRLF--><pre>    </pre><!--CRLF--><pre>    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> setUser(User user) {</pre><!--CRLF--><pre>        System.out.println(<span style="color: #006080">"############Server setUser###########"</span>);</pre><!--CRLF--><pre>        System.out.println(<span style="color: #006080">"setUser:"</span> + user);</pre><!--CRLF--><pre>    }</pre><!--CRLF--><pre>}</pre><!--CRLF--></div></div>
<p>注意的是和Spring集成，这里一定要完成接口实现，如果没有接口的话会有错误的。 </p>
<p>下面要在applicationContext-server.xml文件中添加如下配置： </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">="userServiceBean"</span> <span style="color: #ff0000">class</span><span style="color: #0000ff">="com.hoo.service.ComplexUserService"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">="inMessageInterceptor"</span> <span style="color: #ff0000">class</span><span style="color: #0000ff">="com.hoo.interceptor.MessageInterceptor"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">constructor-arg</span>  <span style="color: #ff0000">value</span><span style="color: #0000ff">="receive"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">="outLoggingInterceptor"</span> <span style="color: #ff0000">class</span><span style="color: #0000ff">="org.apache.cxf.interceptor.LoggingOutInterceptor"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre><span style="color: #008000">&lt;!-- 注意下面的address，这里的address的名称就是访问的WebService的name --&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">jaxws:server</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">="userService"</span> <span style="color: #ff0000">serviceClass</span><span style="color: #0000ff">="com.hoo.service.IComplexUserService"</span> <span style="color: #ff0000">address</span><span style="color: #0000ff">="/Users"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">jaxws:serviceBean</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>        <span style="color: #008000">&lt;!-- 要暴露的 bean 的引用 --&gt;</span></pre><!--CRLF--><pre>        <span style="color: #0000ff">&lt;</span><span style="color: #800000">ref</span> <span style="color: #ff0000">bean</span><span style="color: #0000ff">="userServiceBean"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">jaxws:serviceBean</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">jaxws:inInterceptors</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>        <span style="color: #0000ff">&lt;</span><span style="color: #800000">ref</span> <span style="color: #ff0000">bean</span><span style="color: #0000ff">="inMessageInterceptor"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">jaxws:inInterceptors</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">jaxws:outInterceptors</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>        <span style="color: #0000ff">&lt;</span><span style="color: #800000">ref</span> <span style="color: #ff0000">bean</span><span style="color: #0000ff">="outLoggingInterceptor"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">jaxws:outInterceptors</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;/</span><span style="color: #800000">jaxws:server</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div>
<p>下面启动tomcat服务器后，在WebBrowser中请求： </p>
<p><a href="http://localhost:8080/CXFWebService/Users?wsdl">http://localhost:8080/CXFWebService/Users?wsdl</a> </p>
<p>如果你能看到wsdl的xml文件的内容，就说明你成功了，注意的是上面地址的Users就是上面xml配置中的address的名称，是一一对应的。 </p>
<p>下面编写客户端请求的代码，代码如下： </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #0000ff">package</span> com.hoo.client;</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> org.apache.cxf.jaxws.JaxWsProxyFactoryBean;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> com.hoo.entity.User;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> com.hoo.service.IComplexUserService;</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #008000">/**</span></pre><!--CRLF--><pre><span style="color: #008000"> * &lt;b&gt;function:&lt;/b&gt;请求Spring整合CXF的WebService客户端</span></pre><!--CRLF--><pre><span style="color: #008000"> * @author hoojo</span></pre><!--CRLF--><pre><span style="color: #008000"> * @createDate 2011-3-28 下午03:20:35</span></pre><!--CRLF--><pre><span style="color: #008000"> * @file SpringUsersWsClient.java</span></pre><!--CRLF--><pre><span style="color: #008000"> * @package com.hoo.client</span></pre><!--CRLF--><pre><span style="color: #008000"> * @project CXFWebService</span></pre><!--CRLF--><pre><span style="color: #008000"> * @blog http://blog.csdn.net/IBM_hoojo</span></pre><!--CRLF--><pre><span style="color: #008000"> * @email hoojo_@126.com</span></pre><!--CRLF--><pre><span style="color: #008000"> * @version 1.0</span></pre><!--CRLF--><pre><span style="color: #008000"> */</span></pre><!--CRLF--><pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> SpringUsersWsClient {</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre>    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) {</pre><!--CRLF--><pre>        <span style="color: #008000">//调用WebService</span></pre><!--CRLF--><pre>        JaxWsProxyFactoryBean factory = <span style="color: #0000ff">new</span> JaxWsProxyFactoryBean();</pre><!--CRLF--><pre>        factory.setServiceClass(IComplexUserService.<span style="color: #0000ff">class</span>);</pre><!--CRLF--><pre>        factory.setAddress(<span style="color: #006080">"http://localhost:8080/CXFWebService/Users"</span>);</pre><!--CRLF--><pre>        </pre><!--CRLF--><pre>        IComplexUserService service = (IComplexUserService) factory.create();</pre><!--CRLF--><pre>        </pre><!--CRLF--><pre>        System.out.println(<span style="color: #006080">"#############Client getUserByName##############"</span>);</pre><!--CRLF--><pre>        User user = service.getUserByName(<span style="color: #006080">"hoojo"</span>);</pre><!--CRLF--><pre>        System.out.println(user);</pre><!--CRLF--><pre>        </pre><!--CRLF--><pre>        user.setAddress(<span style="color: #006080">"China-Guangzhou"</span>);</pre><!--CRLF--><pre>        service.setUser(user);</pre><!--CRLF--><pre>    }</pre><!--CRLF--><pre>}</pre><!--CRLF--></div></div>
<p>运行后，可以在控制台中看到</p><pre>log4j:WARN No appenders could be found <span style="color: #0000ff">for</span> logger (org.apache.cxf.bus.spring.BusApplicationContext).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http:<span style="color: #008000">//logging.apache.org/log4j/1.2/faq.html#noconfig for more info.</span>
2011-3-28 18:12:26 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http:<span style="color: #008000">//service.hoo.com/}IComplexUserServiceService from class com.hoo.service.IComplexUserService</span>
#############Client getUserByName##############
27#hoojo#hoojo@hoo.com#china

Tomcat控制台
 <a href="http://images.cnblogs.com/cnblogs_com/hoojo/201103/201103301049197217.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201103/201103301049382661.png" width="644" height="441" /></a> </pre>
<p>这个server端是通过Spring整合配置的，下面我们将Client端也通过Spring配置完成整合。 </p>
<p>首先增加applicationContext-client.xml配置文件，文件内容如下： </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="UTF-8"</span>?<span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span></pre><!--CRLF--><pre>    <span style="color: #ff0000">xmlns:context</span><span style="color: #0000ff">="http://www.springframework.org/schema/context"</span></pre><!--CRLF--><pre>    <span style="color: #ff0000">xmlns:jaxws</span><span style="color: #0000ff">="http://cxf.apache.org/jaxws"</span></pre><!--CRLF--><pre>    <span style="color: #ff0000">xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span></pre><!--CRLF--><pre>    <span style="color: #ff0000">xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans </span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre>    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd</pre><!--CRLF--><pre>    http://www.springframework.org/schema/context</pre><!--CRLF--><pre>    http://www.springframework.org/schema/context/spring-context-3.0.xsd</pre><!--CRLF--><pre>    http://cxf.apache.org/jaxws </pre><!--CRLF--><pre>    http://cxf.apache.org/schemas/jaxws.xsd"</pre><!--CRLF--><pre>    </pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">import</span> <span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf.xml"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">import</span> <span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf-extension-soap.xml"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">import</span> <span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf-servlet.xml"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre>    </pre><!--CRLF--><pre>    <span style="color: #0000ff">&lt;</span><span style="color: #800000">jaxws:client</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">="userWsClient"</span> <span style="color: #ff0000">serviceClass</span><span style="color: #0000ff">="com.hoo.service.IComplexUserService"</span> </pre><!--CRLF--><pre>        <span style="color: #ff0000">address</span><span style="color: #0000ff">="http://localhost:8080/CXFWebService/Users"</span><span style="color: #0000ff">/&gt;</span></pre><!--CRLF--><pre><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div>
<p>客户端请求代码如下： </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre><span style="color: #0000ff">package</span> com.hoo.client;</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> org.apache.cxf.jaxws.JaxWsProxyFactoryBean;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> org.springframework.context.ApplicationContext;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> org.springframework.context.support.ClassPathXmlApplicationContext;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> com.hoo.entity.User;</pre><!--CRLF--><pre><span style="color: #0000ff">import</span> com.hoo.service.IComplexUserService;</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre><span style="color: #008000">/**</span></pre><!--CRLF--><pre><span style="color: #008000"> * &lt;b&gt;function:&lt;/b&gt;请求Spring整合CXF的WebService客户端</span></pre><!--CRLF--><pre><span style="color: #008000"> * @author hoojo</span></pre><!--CRLF--><pre><span style="color: #008000"> * @createDate 2011-3-28 下午03:20:35</span></pre><!--CRLF--><pre><span style="color: #008000"> * @file SpringUsersWsClient.java</span></pre><!--CRLF--><pre><span style="color: #008000"> * @package com.hoo.client</span></pre><!--CRLF--><pre><span style="color: #008000"> * @project CXFWebService</span></pre><!--CRLF--><pre><span style="color: #008000"> * @blog http://blog.csdn.net/IBM_hoojo</span></pre><!--CRLF--><pre><span style="color: #008000"> * @email hoojo_@126.com</span></pre><!--CRLF--><pre><span style="color: #008000"> * @version 1.0</span></pre><!--CRLF--><pre><span style="color: #008000"> */</span></pre><!--CRLF--><pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> SpringUsersWsClient {</pre><!--CRLF--><pre>&nbsp;</pre><!--CRLF--><pre>    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) {</pre><!--CRLF--><pre>        ApplicationContext ctx = <span style="color: #0000ff">new</span> ClassPathXmlApplicationContext(<span style="color: #006080">"applicationContext-client.xml"</span>);</pre><!--CRLF--><pre>        </pre><!--CRLF--><pre>        IComplexUserService service = ctx.getBean(<span style="color: #006080">"userWsClient"</span>, IComplexUserService.<span style="color: #0000ff">class</span>);</pre><!--CRLF--><pre>        </pre><!--CRLF--><pre>        System.out.println(<span style="color: #006080">"#############Client getUserByName##############"</span>);</pre><!--CRLF--><pre>        User user = service.getUserByName(<span style="color: #006080">"hoojo"</span>);</pre><!--CRLF--><pre>        System.out.println(user);</pre><!--CRLF--><pre>        </pre><!--CRLF--><pre>        user.setAddress(<span style="color: #006080">"China-Guangzhou"</span>);</pre><!--CRLF--><pre>        service.setUser(user);</pre><!--CRLF--><pre>    }</pre><!--CRLF--><pre>}</pre><!--CRLF--></div></div>
<p>运行后结果如下：</p><pre>#############Client getUserByName##############
45#hoojo#hoojo@hoo.com#china
############Server setUser###########
setUser:45#hoojo#hoojo@hoo.com#China-Guangzhou</pre></div>
<div id="MySignature">
<div id="MySignature" class="post">
<p style="padding-bottom: 0px; padding-left: 60px; padding-right: 0px;background: url(http://images.cnblogs.com/cnblogs_com/hoojo/276187/r_o_info.png) no-repeat 1% 50%; padding-top: 0px">作者：<a href="http://hoojo.cnblogs.com/" target="_blank">hoojo</a> <br />出处：<a href="http://hoojo.cnblogs.com/" target="_blank"> </p>http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html</a><br />blog：<a href="http://blog.csdn.net/IBM_hoojo/" target="_blank">http://blog.csdn.net/IBM_hoojo</a><br />本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 
<p>&nbsp;</p></div><br /><a href="http://hoojo.cnblogs.com/">版权所有，转载请注明出处</a> <a href="http://hoojo.cnblogs.com/">本文出自： http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html</a><br /></div> <img src ="http://www.blogjava.net/stevenjohn/aggbug/385926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-08-21 11:17 <a href="http://www.blogjava.net/stevenjohn/archive/2012/08/21/385926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cxf spring集成(一)</title><link>http://www.blogjava.net/stevenjohn/archive/2012/08/21/385896.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Mon, 20 Aug 2012 16:27:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/08/21/385896.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/385896.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/08/21/385896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/385896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/385896.html</trackback:ping><description><![CDATA[<p>/**<br />&nbsp;* <br />&nbsp;*/<br />package com.abin.lee.cxf;</p>
<p>import javax.jws.WebService;</p>
<p>/**<br />&nbsp;* @author abin<br />&nbsp;*<br />&nbsp;*/<br />@WebService(targetNamespace="cxf.lee.abin.com")<br />public interface IUserService {<br />&nbsp;public String getMessage(String message);<br />}<br /></p><br /><br /><br /><br />
<p>package com.abin.lee.cxf;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService(endpointInterface="com.abin.lee.cxf.IUserService")<br />public class UserService implements IUserService{</p>
<p>&nbsp;public String getMessage(String message) {<br />&nbsp;&nbsp;return message+" welcome to beijing";<br />&nbsp;}<br />&nbsp;<br />}<br /></p><br /><br /><br /><br /><br />
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;beans xmlns="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>"<br />&nbsp;xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xmlns:context="<a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a>"<br />&nbsp;xmlns:aop="<a href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a>"<br />&nbsp;xmlns:tx="<a href="http://www.springframework.org/schema/tx">http://www.springframework.org/schema/tx</a>"<br />&nbsp;xmlns:jaxws="<a href="http://cxf.apache.org/jaxws">http://cxf.apache.org/jaxws</a>"<br />&nbsp;xmlns:cxf="<a href="http://cxf.apache.org/core">http://cxf.apache.org/core</a>"<br />&nbsp;xmlns:wsa="<a href="http://cxf.apache.org/ws/addressing">http://cxf.apache.org/ws/addressing</a>"<br />&nbsp;xsi:schemaLocation="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a><br />&nbsp;<a href="http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">http://www.springframework.org/schema/beans/spring-beans-3.0.xsd</a><br />&nbsp;<a href="http://www.springframework.org/schema/tx">http://www.springframework.org/schema/tx</a> <br />&nbsp;<a href="http://www.springframework.org/schema/tx/spring-beans-3.0.xsd">http://www.springframework.org/schema/tx/spring-beans-3.0.xsd</a><br />&nbsp;<a href="http://cxf.apache.org/core">http://cxf.apache.org/core</a> <br />&nbsp;<a href="http://cxf.apache.org/schemas/core.xsd">http://cxf.apache.org/schemas/core.xsd</a><br />&nbsp;<a href="http://cxf.apache.org/jaxws">http://cxf.apache.org/jaxws</a> <br />&nbsp;<a href="http://cxf.apache.org/schemas/jaxws.xsd">http://cxf.apache.org/schemas/jaxws.xsd</a><br />&nbsp;<a href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a> <br />&nbsp;<a href="http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">http://www.springframework.org/schema/aop/spring-aop-3.0.xsd</a><br />&nbsp;<a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a><br />&nbsp;<a href="http://www.springframework.org/schema/context/spring-context-3.0.xsd">http://www.springframework.org/schema/context/spring-context-3.0.xsd</a>"&gt;<br />&nbsp;&lt;import resource="classpath:META-INF/cxf/cxf.xml" /&gt;<br />&nbsp;&lt;import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /&gt;<br />&nbsp;&lt;import resource="classpath:META-INF/cxf/cxf-servlet.xml" /&gt;<br />&nbsp;<br />&nbsp;&lt;cxf:bus&gt;<br />&nbsp;&nbsp;&lt;cxf:features&gt;<br />&nbsp;&nbsp;&nbsp;&lt;!--日志拦截功能，用于监控soap内容，开发后可以删除 --&gt; <br />&nbsp;&nbsp;&nbsp;&lt;cxf:logging/&gt;<br />&nbsp;&nbsp;&nbsp;&lt;wsa:addressing/&gt;<br />&nbsp;&nbsp;&lt;/cxf:features&gt;<br />&nbsp;&lt;/cxf:bus&gt;&nbsp; </p>
<p>&nbsp;&lt;bean id="userService" class="com.abin.lee.cxf.UserService"&gt;&lt;/bean&gt;<br />&nbsp;&lt;jaxws:endpoint id="userWebservice" implementor="#userService" address="/UserService" publish="true" /&gt;</p>
<p><br />&lt;/beans&gt;</p>
<p>&nbsp;</p><br /><br /><br /><br />&lt;context-param&gt;<br />&nbsp;&nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />&nbsp;&nbsp;&lt;param-value&gt;<br />&nbsp;&nbsp;&nbsp;&lt;!--<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classpath*:com/abin/lee/spring/queue/applicationContext-springqueue.xml,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classpath*:com/abin/lee/quartz/applicationContext-quartzCluster.xml,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classpath*:com/abin/lee/quartz/applicationContext-quartzHeartCluster.xml,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classpath*:com/abin/lee/quartz/applicationContext-activemq.xml<br />&nbsp;&nbsp;&nbsp;--&gt;<br />&nbsp;&nbsp;&nbsp;classpath*:com/abin/lee/cxf/applicationContext-cxf.xml<br />&nbsp;&nbsp;&lt;/param-value&gt;<br />&nbsp;&lt;/context-param&gt; <br />&nbsp;&lt;listener&gt;<br />&nbsp;&nbsp;&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />&nbsp;&lt;/listener&gt;<br />&nbsp;&lt;!--cxf服务启动servlet--&gt;<br />&nbsp;&lt;servlet&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;servlet-class&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.cxf.transport.servlet.CXFServlet&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;/servlet-class&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&lt;/servlet&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&lt;servlet-mapping&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&lt;url-pattern&gt;/service/*&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&lt;/servlet-mapping&gt;&nbsp; <br /><br /><br /><br /><br /><br /><br />
<p>package com.abin.lee.spring;</p>
<p>import org.springframework.beans.BeansException; <br />import org.springframework.context.ApplicationContext; <br />import org.springframework.context.ApplicationContextAware;<br />import org.springframework.context.support.ClassPathXmlApplicationContext;</p>
<p>/**<br />&nbsp;* <br />&nbsp;* 获取spring容器，以访问容器中定义的其他bean<br />&nbsp;* <br />&nbsp;* @author lyltiger<br />&nbsp;* @since MOSTsView 3.0 2009-11-16<br />&nbsp;*/<br />public class SpringContextUtil implements ApplicationContextAware {</p>
<p>&nbsp;// Spring应用上下文环境<br />&nbsp;private static ApplicationContext applicationContext = new ClassPathXmlApplicationContext(<br />&nbsp;&nbsp;&nbsp;"com/abin/lee/cxf/applicationContext-cxf.xml");</p>
<p>&nbsp;/**<br />&nbsp; * 实现ApplicationContextAware接口的回调方法，设置上下文环境<br />&nbsp; * <br />&nbsp; * @param applicationContext<br />&nbsp; */<br />&nbsp;public void setApplicationContext(ApplicationContext applicationContext) {<br />&nbsp;&nbsp;SpringContextUtil.applicationContext = applicationContext;<br />&nbsp;}</p>
<p>&nbsp;/**<br />&nbsp; * @return ApplicationContext<br />&nbsp; */<br />&nbsp;public static ApplicationContext getApplicationContext() {<br />&nbsp;&nbsp;return applicationContext;<br />&nbsp;}</p>
<p>&nbsp;/**<br />&nbsp; * 获取对象 这里重写了bean方法，起主要作用<br />&nbsp; * <br />&nbsp; * @param name<br />&nbsp; * @return Object 一个以所给名字注册的bean的实例<br />&nbsp; * @throws BeansException<br />&nbsp; */<br />&nbsp;public static Object getBean(String name) throws BeansException {<br />&nbsp;&nbsp;return applicationContext.getBean(name);<br />&nbsp;}</p>
<p>}</p><br /><br /><br /><br /><br /><br /><br /><br />
<p>package com.abin.lee.cxf.test;</p>
<p>import com.abin.lee.cxf.UserService;<br />import com.abin.lee.spring.SpringContextUtil;</p>
<p>import junit.framework.TestCase;</p>
<p>public class TestUserService extends TestCase{<br />&nbsp;public void testcxf(){<br />&nbsp;&nbsp;UserService userService=(UserService)SpringContextUtil.getBean("userService");<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;String response=userService.getMessage("abin");<br />&nbsp;&nbsp;System.out.println("response="+response);<br />&nbsp;&nbsp;System.exit(0);<br />&nbsp;}<br />}<br /></p><br /> <img src ="http://www.blogjava.net/stevenjohn/aggbug/385896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-08-21 00:27 <a href="http://www.blogjava.net/stevenjohn/archive/2012/08/21/385896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>采用Spring管理Bean和依赖注入 </title><link>http://www.blogjava.net/stevenjohn/archive/2012/08/20/385846.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Mon, 20 Aug 2012 04:34:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/08/20/385846.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/385846.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/08/20/385846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/385846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/385846.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.实例化spring容器 和 从容器获取Bean对象实例化Spring容器常用的两种方式：方法一:在类路径下寻找配置文件来实例化容器 [推荐使用]ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});方法二:在文件系统路径下寻找配置文件来实例化容器 [这...&nbsp;&nbsp;<a href='http://www.blogjava.net/stevenjohn/archive/2012/08/20/385846.html'>阅读全文</a><img src ="http://www.blogjava.net/stevenjohn/aggbug/385846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-08-20 12:34 <a href="http://www.blogjava.net/stevenjohn/archive/2012/08/20/385846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring获取bean实例</title><link>http://www.blogjava.net/stevenjohn/archive/2012/08/20/385823.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Mon, 20 Aug 2012 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/08/20/385823.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/385823.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/08/20/385823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/385823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/385823.html</trackback:ping><description><![CDATA[<p>方法一：<br />package com.abin.lee.queue;</p>
<p>import org.springframework.beans.BeansException;<br />import org.springframework.context.ApplicationContext;<br />import org.springframework.context.ApplicationContextAware;<br />import org.springframework.context.support.ClassPathXmlApplicationContext;</p>
<p>/**<br />&nbsp;* <br />&nbsp;* 获取spring容器，以访问容器中定义的其他bean<br />&nbsp;* <br />&nbsp;* @author lyltiger<br />&nbsp;* @since MOSTsView 3.0 2009-11-16<br />&nbsp;*/<br />public class SpringContextUtil implements ApplicationContextAware {</p>
<p>&nbsp;// Spring应用上下文环境<br />&nbsp;private static ApplicationContext applicationContext = new ClassPathXmlApplicationContext(<br />&nbsp;&nbsp;&nbsp;"com/abin/lee/spring/applicationContext-queue.xml");</p>
<p>&nbsp;/**<br />&nbsp; * 实现ApplicationContextAware接口的回调方法，设置上下文环境<br />&nbsp; * <br />&nbsp; * @param applicationContext<br />&nbsp; */<br />&nbsp;public void setApplicationContext(ApplicationContext applicationContext) {<br />&nbsp;&nbsp;SpringContextUtil.applicationContext = applicationContext;<br />&nbsp;}</p>
<p>&nbsp;/**<br />&nbsp; * @return ApplicationContext<br />&nbsp; */<br />&nbsp;public static ApplicationContext getApplicationContext() {<br />&nbsp;&nbsp;return applicationContext;<br />&nbsp;}</p>
<p>&nbsp;/**<br />&nbsp; * 获取对象 这里重写了bean方法，起主要作用<br />&nbsp; * <br />&nbsp; * @param name<br />&nbsp; * @return Object 一个以所给名字注册的bean的实例<br />&nbsp; * @throws BeansException<br />&nbsp; */<br />&nbsp;public static Object getBean(String name) throws BeansException {<br />&nbsp;&nbsp;return applicationContext.getBean(name);<br />&nbsp;}</p>
<p>}</p><br /><br /><br /><br />方法二：<br />
<p>package com.abin.lee.queue;</p>
<p>import org.springframework.beans.factory.BeanFactory;<br />import org.springframework.beans.factory.xml.XmlBeanFactory;<br />import org.springframework.core.io.ClassPathResource;</p>
<p>public class BeanFactoryUtil {<br />&nbsp;private static BeanFactory factory = new XmlBeanFactory(<br />&nbsp;&nbsp;&nbsp;new ClassPathResource(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"com/abin/lee/spring/applicationContext-queue.xml"));</p>
<p>&nbsp;public static BeanFactory getFactory() {<br />&nbsp;&nbsp;return factory;<br />&nbsp;}</p>
<p>&nbsp;public static void setFactory(BeanFactory factory) {<br />&nbsp;&nbsp;BeanFactoryUtil.factory = factory;<br />&nbsp;}<br />&nbsp;<br />&nbsp;public static Object getBean(String name){<br />&nbsp;&nbsp;return factory.getBean(name);<br />&nbsp;}<br />}<br /></p><br /><br /><br /><br /><br /><br />具体用法：<br />
<p>package com.abin.lee.queue;</p>
<p>import java.io.BufferedWriter;<br />import java.io.IOException;<br />import java.io.OutputStreamWriter;<br />import java.util.Map;</p>
<p>import javax.servlet.ServletException;<br />import javax.servlet.ServletOutputStream;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p>
<p>public class QueueServlet extends HttpServlet{<br />&nbsp;<br />&nbsp;protected void doPost(HttpServletRequest request, HttpServletResponse response)<br />&nbsp;&nbsp;&nbsp;throws ServletException, IOException {<br />&nbsp;&nbsp;Map map=request.getParameterMap();<br />&nbsp;&nbsp;String name1=(String)((Object[])map.get("name1"))[0];<br />&nbsp;&nbsp;String name2=(String)((Object[])map.get("name2"))[0];<br />&nbsp;&nbsp;MakeQueue makeQueue = (MakeQueue)BeanFactoryUtil.getBean("makeQueue");//bean的名称 <br />&nbsp;&nbsp;System.out.println(makeQueue.queueSize());<br />&nbsp;&nbsp;makeQueue.addQueue(name1);<br />&nbsp;&nbsp;makeQueue.addQueue(name2);<br />&nbsp;&nbsp;System.out.println(makeQueue.queueSize());<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;ServletOutputStream out=response.getOutputStream();<br />&nbsp;&nbsp;BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out));<br />&nbsp;&nbsp;writer.write("success");<br />&nbsp;&nbsp;writer.flush();<br />&nbsp;&nbsp;writer.close();<br />&nbsp;}<br />}<br /></p><br /><br /><img src ="http://www.blogjava.net/stevenjohn/aggbug/385823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-08-20 11:34 <a href="http://www.blogjava.net/stevenjohn/archive/2012/08/20/385823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring：JdbcTemplate使用指南</title><link>http://www.blogjava.net/stevenjohn/archive/2012/06/25/381407.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Mon, 25 Jun 2012 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/06/25/381407.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/381407.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/06/25/381407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/381407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/381407.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前言：本文指在介绍Spring框架中的JdbcTemplate类的使用方法，涉及基本的Spring反转控制的使用方法和JDBC的基本概念。目标是使读者能够对JdbcTemplate快速地掌握和使用。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;准备：1. Spring的基本概念&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/stevenjohn/archive/2012/06/25/381407.html'>阅读全文</a><img src ="http://www.blogjava.net/stevenjohn/aggbug/381407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-06-25 10:28 <a href="http://www.blogjava.net/stevenjohn/archive/2012/06/25/381407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>