现在的位置: 首页 > 综合 > 正文

(转)使用Spring2.5的Autowired实现注释型的IOC

2012年01月10日 ⁄ 综合 ⁄ 共 13187字 ⁄ 字号 评论关闭
  1. 使用Spring2.5的Autowired实现注释型的IOC   
  2. 阅读(31) 评论(0) 发表时间:20090116日 11:57    
  3. 本文地址:http://qzone.qq.com/blog/55357655-1232078233    
  4.   
  5. 本文标签: Autowired context IOC xml beans   
  6.     
  7.     
  8.   使用Spring2.5的新特性——Autowired可以实现快速的自动注入,而无需在xml文档里面添加bean的声明,大大减少了xml文档的维护。(偶喜欢这个功能,因为偶对xml不感冒)。       以下是一个例子:   
  9. 先编写接口Man:   
  10.        public interface Man {   
  11.            public String sayHello();   
  12. }   
  13. 然后写Man的实现类Chinese和American:   
  14.        @Service  
  15. public class Chinese implements Man{   
  16.     public String sayHello() {   
  17.         return "I am Chinese!";   
  18.     }   
  19. }   
  20.   
  21.        @Service  
  22. public class American implements Man{   
  23.     public String sayHello() {   
  24.         return "I am American!";   
  25.     }   
  26. }   
  27.   
  28. @Service注释表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,例如Chinese实例化为chinese,American实例化为american,如果需要自己改名字则:@Service("你自己改的bean名")。   
  29.   
  30. beans.xml   
  31. <?xml version="1.0" encoding="UTF-8"?>   
  32. <beans xmlns="http://www.springframework.org/schema/beans"  
  33.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  34.         xmlns:context="http://www.springframework.org/schema/context"  
  35.         xsi:schemaLocation="http://www.springframework.org/schema/beans    
  36.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  37.            http://www.springframework.org/schema/context   
  38.            http://www.springframework.org/schema/context/spring-context-2.5.xsd">   
  39.       <context:annotation-config/>   
  40.       <context:component-scan base-package="testspring.main"/>   
  41. </beans>   
  42. 在spring的配置文件里面只需要加上<context:annotation-config/>和<context:component-scan base-package="需要实现注入的类所在包"/>,可以使用base-package="*"表示全部的类。   
  43.   
  44. 编写主类测试:   
  45. @Service  
  46. public class Main {   
  47.     @Autowired  
  48.     @Qualifier("chinese")   
  49.     private Man man;   
  50.   
  51.     public static void main(String[] args) {   
  52.         // TODO code application logic here   
  53.         ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");   
  54.         Main main = (Main) ctx.getBean("main");   
  55.         System.out.println(main.getMan().sayHello());   
  56.     }   
  57.   
  58.     public Man getMan() {   
  59.         return man;   
  60.     }   
  61. }   
  62.   
  63. 在Man接口前面标上@Autowired@Qualifier注释使得Man接口可以被容器注入,当Man接口存在两个实现类的时候必须指定其中一个来注入,使用实现类首字母小写的字符串来注入。否则可以省略,只写@Autowired    
  64.   
  65. **********************   
  66. 使用 Spring 2.5 注释驱动的 IoC 功能   
  67. 发表于08-03-04 20:38 | 阅读 1285 | 评分 (暂无)    
  68. 概述   
  69.   
  70. 注释配置相对于 XML 配置具有很多的优势:   
  71.   
  72. 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java 反射机制获取。    
  73. 注释和 Java 代码位于一个文件中,而 XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和 Java 代码放在一起,有助于增强程序的内聚性。而采用独立的 XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。    
  74. 因此在很多情况下,注释配置比 XML 配置更受欢迎,注释配置有进一步流行的趋势。Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分 XML 配置的功能。在这篇文章里,我们将向您讲述使用注释进行 Bean 定义和依赖注入的内容。   
  75.   
  76.   
  77.   
  78.     
  79.   
  80.   
  81.  回页首    
  82.     
  83.   
  84.   
  85.   
  86. 原来我们是怎么做的   
  87.   
  88. 在使用注释配置之前,先来回顾一下传统上是如何配置 Bean 并完成 Bean 之间依赖关系的建立。下面是 3 个类,它们分别是 Office、Car 和 Boss,这 3 个类需要在 Spring 容器中配置为 Bean:   
  89.   
  90. Office 仅有一个属性:   
  91.   
  92.   
  93. 清单 1. Office.java   
  94.                    
  95. package com.baobaotao;   
  96. public class Office {   
  97.     private String officeNo =”001”;   
  98.   
  99.     //省略 get/setter   
  100.   
  101.     @Override  
  102.     public String toString() {   
  103.         return "officeNo:" + officeNo;   
  104.     }   
  105. }   
  106.     
  107.   
  108.   
  109. Car 拥有两个属性:   
  110.   
  111.   
  112. 清单 2. Car.java   
  113.                    
  114. package com.baobaotao;   
  115.   
  116. public class Car {   
  117.     private String brand;   
  118.     private double price;   
  119.   
  120.     // 省略 get/setter   
  121.   
  122.     @Override  
  123.     public String toString() {   
  124.         return "brand:" + brand + "," + "price:" + price;   
  125.     }   
  126. }   
  127.     
  128.   
  129.   
  130. Boss 拥有 Office 和 Car 类型的两个属性:   
  131.   
  132.   
  133. 清单 3. Boss.java   
  134.                    
  135. package com.baobaotao;   
  136.   
  137. public class Boss {   
  138.     private Car car;   
  139.     private Office office;   
  140.   
  141.     // 省略 get/setter   
  142.   
  143.     @Override  
  144.     public String toString() {   
  145.         return "car:" + car + "/n" + "office:" + office;   
  146.     }   
  147. }   
  148.     
  149.   
  150.   
  151. 我们在 Spring 容器中将 Office 和 Car 声明为 Bean,并注入到 Boss Bean 中:下面是使用传统 XML 完成这个工作的配置文件 beans.xml:   
  152.   
  153.   
  154. 清单 4. beans.xml 将以上三个类配置成 Bean   
  155.                    
  156. <?xml version="1.0" encoding="UTF-8" ?>   
  157. <beans xmlns="http://www.springframework.org/schema/beans"  
  158.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  159.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  160.  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">   
  161.     <bean id="boss" class="com.baobaotao.Boss">   
  162.         <property name="car" ref="car"/>   
  163.         <property name="office" ref="office" />   
  164.     </bean>   
  165.     <bean id="office" class="com.baobaotao.Office">   
  166.         <property name="officeNo" value="002"/>   
  167.     </bean>   
  168.     <bean id="car" class="com.baobaotao.Car" scope="singleton">   
  169.         <property name="brand" value=" 红旗 CA72"/>   
  170.         <property name="price" value="2000"/>   
  171.     </bean>   
  172. </beans>   
  173.     
  174.   
  175.   
  176. 当我们运行以下代码时,控制台将正确打出 boss 的信息:   
  177.   
  178.   
  179. 清单 5. 测试类:AnnoIoCTest.java   
  180.                    
  181. import org.springframework.context.ApplicationContext;   
  182. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  183. public class AnnoIoCTest {   
  184.   
  185.     public static void main(String[] args) {   
  186.         String[] locations = {"beans.xml"};   
  187.         ApplicationContext ctx =    
  188.             new ClassPathXmlApplicationContext(locations);   
  189.         Boss boss = (Boss) ctx.getBean("boss");   
  190.         System.out.println(boss);   
  191.     }   
  192. }   
  193.     
  194.   
  195.   
  196. 这说明 Spring 容器已经正确完成了 Bean 创建和装配的工作。   
  197.   
  198.   
  199.   
  200.     
  201.   
  202.   
  203.  回页首    
  204.     
  205.   
  206.   
  207.   
  208. 使用 @Autowired 注释   
  209.   
  210. Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。来看一下使用 @Autowired 进行成员变量自动注入的代码:   
  211.   
  212.   
  213. 清单 6. 使用 @Autowired 注释的 Boss.java   
  214.                    
  215. package com.baobaotao;   
  216. import org.springframework.beans.factory.annotation.Autowired;   
  217.   
  218. public class Boss {   
  219.   
  220.     @Autowired  
  221.     private Car car;   
  222.   
  223.     @Autowired  
  224.     private Office office;   
  225.   
  226.     …   
  227. }   
  228.     
  229.   
  230.   
  231. Spring 通过   on>}u
  232.   
  233. Spring 通过   on>}u<声攨事先an>    
  234. li> <233 
  235.  >
  236. 这说明 Spring 容器已经正确完成了 Bean 创建和装配的代码:   
  237.   
  238. #c00000;">11<
  239.   
  240. Spring 通过   on>}u因为,<可nnotation">@Autowired 注释的 Bos Bean   
  241.                    
  242. <?xml version="1.0" encoding="1>
  243. <beans xmlns="http://www.springframework.org/schema/beans"  
  244.     xmlns:xsi=  
  245.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  246.  http://www.springframework.on style="color: #0000ff;"http:/>
  247.  °pan>
  248.   
  249. Spring 通过   on>}u"002"/> n class="keyword">public <="n class="keyword">@Au3 
  250. "> value=n style="color: #0000ff;"http:/> Class >"002"/> s/spring-beans-2.5.xsd">   
  251.     <bean id="boss" class= value="002"/> s/spring-beans-2.5.xsd">   
  252.     <bean id="office" class=@Au;">"com.baobaotao.Office">   
  253.         <property name="offic1No" value="002"/>   
  254.     </bean>   
  255.     <bean id="car" class="com.baobaotao.Car" scope=="string">@Au;">"com.baobaotao.Office">   
  256.         <property name="brand" value=" 红旗 CA72"/>   
  257.         <property name="price" value="2000"/>   
  258.     </beani>    }   
  259. }   
  260. 样le="co    3 
  261.  
  262. 所   pan>  发现我an>   pan>
  263.   
  264. Spring 通过   on>}u因/spa找到和其匹(默认按> n>"*"上面明为 B    清单 6. 使用 <后O 的ng  hre ())从/san clali>删除>"*"6. 使用 <对wle="c或r: #646464;">@Autowired@Autowired 进行成员变量自动注入的代码:   
  265.   
  266. #c00000;">20<./sp pan>
  267.   
  268. Spring 通过   on>}u因/ired  li>@Autowired 注释的 Boss.java   
  269.                    
  270. public public
  271.     private Car car;   
  272.     private
  273.   
  274. Spring 通过   on>}ur: #7f0055;">class AnnoIoCTest {   
  275.   
  276.     public public String toString() {   
  277. thistrong>
     <.cer">=ass="keyword">class AnnoIoCTest {   
  278.   
  279.     public ( class="keywor>public String toString() {   
  280. thistrong> <.oclass="=+ "office:" Office office;   
  281.   
  282.     …   
  283. }   
  284.  6. 使用 < an >@Autowired@Autowired 进行成员变量自动注入的代码:   
  285.   
  286. 9#c00000;">20<./sp pan>
  287.   
  288. Spring 通过   on>}u因/iredw: #646464;"上nnotation">@Autowired 注释的 Boss.java   
  289.                    
  290. public public
  291.     private Car car;   
  292.     class AnnoIoCTest {   
  293.   
  294.     trong>public String toString() {   
  295. thistrong>
     <.cer">=ass="keyword">     6. 使用 < an >li置>>
  296. /li>
  297. 这说明 Spring 容器已经正确完成了 Bean 创建和装配的工作。   
  298.   
  299.   
  300.   
  301.     
  302.   
  303. 4;"目httpi>
  304.   
  305. an> String of4置对wle="c
  306. 默认槍思维an>清单 6. 使用 "s#ss="annotation"
  307.   
  308. > 候选4;"目  ”g 容器中夽找置戰器中錹> an >   
  309. <至少pan>  ¨中錹> an >
  310. 皁 ¨中鮞验/se="color: #646464;">@Autowired 进行成员变量自动注入的代码:   
  311.   
  312. 10#c00000;">20<./sp选4;"目ht>
  313.   
  314. 0#c00000;">20<4nnotation">@Autowired 注释的 Bos Bean   
  315.                    
  316. <?xml version="1.0" encoding="1>
  317. <beans xmlns="http://www.springframework.org/schema/beans"  
  318.     xmlns:xsi=  
  319.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  320.  http://www.springframeworknnotation">public <="n class="keyword">@Au3 
  321. "> va 
  322. /> s/spring-beans-2.5.xsd">   
  323.     <bean id="boss" class= value="002"/!--an>/> s/spring-beans-2.5.xsd">   
  324.     <bean id="office" class="com.baobaotao.Office">   
  325.         <property name="offic1No" value="002"/> s/spring-beans-2.5.xsd">   
  326.     <bean id="car" class="com.baobaotao.Car" scope=="string">@Au;">"com.baobaotao.Office">   
  327.         <property name="brand" value=" 红旗 CA72"/>   
  328.         <property name="price" value="2000"/>   
  329.     </beani>    }   
  330. }   
  331. <由li> <被/因/了spa3  >2.5
     引入了  启not    "*"    prinpan> 某 class> an >class="这 "annotation"¯assss >2.52.5 引入了(requ/spa="=+ean id="fals>
  332.     w置戰錹an >@Autowired 进行成员变量自动注入的代码:   
  333.   
  334. 1  
  335. 2.5 引入了(requ/spa="=+ean id="fals>
  336.     @Autowired 注释的 Boss.java   
  337.                    
  338. import
  339.   
  340. public "002"public
  341.     private Car car;   
  342.     class AnnoIoCTest {   
  343.   
  344.     public public String toString() {   
  345. thistrong>
     <.cer">=ass="keyword">"fals>
  346.     public ( class="keywor>public String toString() {   
  347. thistrong>
     <.oclass="=+ 
    "office:" Office office;   
  348.   
  349.     …   
  350. }   
  351. <然O 对般槍思维O n>清单 
    6. 使用 <置方都是这 ation"  >清ng"annotation"€>cl允许置tion">开发期或rn>清期碰戰(如ht>ng快速启not    Sprin纛模块> anli> Bean,)spa3
  352.   
  353. Spring 通过   on>}(requ/spa="=+ean id="fals>
  354.     "*"  中错误是:a果    
  355. an> 多中這选li>   
  356. @Autowired 进行成员变量自动注入的代码:   
  357.   
  358. 12 
  359.  an>清单 li>> B   <@Autowired 注释的 Bos> 注释的 Bos Bea> s/spring-beans-2.5.xsd">   
  360.     <bean id="office" class="com.baobaotao.Office">   
  361.         <property name="offic1e" value="2000"  
  362.  value="office" class="com.baobaotao.Office">   
  363.         <property name="offic1e" value="2000" Office office;   
  364.     }   
  365. }   
  366.     
  367. > B C   
    戰麕 攨< 
    "*"6@Autowired 进行成员变量自动注入的代码:   
  368.   
  369. 13 
  370. 清单 6@Autowired 注释的 Bosi>  
  371. Spring 通过   on>}ur: #7f0055;">class AnnoIoCTest {   
  372.   
  373.     public 6
  374.         Bi>
  375.     <be) class="keywor>ppan> String toString() {   
  376. thistrong>
     <.oclass="=+ 
  377.   
  378.     …   
  379. }   
  380. pan class="number">6
  381.         Bi>
  382.     <be)lali>
  383.   
  384. Spring 通过   on>}">6"annotation">
  385.   
  386. Spring 通过   on>}">@Autowspan>6因为象>  同spa3
  387.   
  388. Spring 通过   on>}u6@Autowspan>明pan style="color: #646464;">@Autowired 进"anation">@Autowspan>@Autowired 进行成员变量自动注入的代码:   
  389.   
  390. 14 
  391. 清单 6@Autowired 注释的 Bosi>IoCTest {   
  392.   
  393.     public 
  394. Spring 通过   on>}ur: #7f0055;">class AnnoIoCTest {   
  395.   
  396.     
  397. Spring 通过   on>}ur: #7f0055;">class Annos="number">6
  398.         Bi>
  399.     <be)rong>ppan> String toString() {   
  400. n>
  401.     @Autowspan>@Autowired 进行成员变量自动注入的代码:   
  402.   
  403. 1  
  404. 清单 6@Autowired 注释的 Bosi>IoCTest {   
  405.   
  406.     public public
  407.     private Car car;   
  408.     @Autowired 进行n>
  409. Spring 通过   on>}ur: #7f0055;">class AnnoIoCTest {   
  410.   
  411.     6
  412.         Bi>
  413.     <be) class="keywor>trong>public String toString() {   
  414. thistrong>
     <.cer">=ass="keyword">66. 使用 <合p>6. 使用 <> >>明补充> 6 >@Autowspan>会降低pan st可读性
  415. 这说明 Spring 容器已经正确完成了 Bean 创建和装配的工作。   
  416.   
  417.   
  418.   
  419.     
  420.   
  421. 清JSR-:   
  422.   
  423. 250pan>. 使用 @Autowirhttp支挠"ann定义6. 使用 程庘支挠几/sp由JSR-:   
  424.   
  425. 250pan>. 使用 <规范定义6. 使用、 6 . 使用 6ypan>. 使用i>
  426. 这说明 Spring 容器已经正确完pan class="number">6. 使用
  427. 这说明 Spring 容器已经正确完pan class="number">6. 使用 <明p>攨当li> < 6. 使用spa〪个僽丕 6. 使用 <按/sbyTyps="annotation"spa面 c 6. 使用 默认按>了>
  428.   
  429. Spring 通过 Resourcepan>. 使用 >    6. 使用 /span>
  430. 清nao.<的O aaan>清byNao.明annotation">略清typs="<的/spaaan>清byTyps="annotation">略夦果既置指nnao.也置指ntyps="<的程序spa型都您甚至an>清byNao.戒annotation">略Resource /span><位li> <   >  此n>清n前hre加n>它可以对籪an>清单 6. 使用 <明p子/se="color: #646464;">@Autowired 进行成员变量自动注入的代码:   
  431.   
  432. 16pan>. 使用清单 6. 使用 /span>@Autowired 注释的 Bosi>IoCTest {   
  433.   
  434. public class Annoorg/schema/beans   戒annotation"> an >. 使用
  435. 这说明 Spring n>
  436. Spring 通过 Resourcepan>. 使用
  437. 这说明 Spring n>public
  438.     class Annoorg/schema/beans   戒annotation" an><名称ht> an >. 使用
  439. 这说明 Spring n>
  440. Spring 通过 Resourcepan>. 使用(nao.=+ean id=
  441.         Bi>
  442.     <be)rong>ppan> String toString() {   
  443. n>
  444.     6. 使用(typs= cl.n class="keyword">public <)方0  li>
  445. 获取 "JSR-:   
  446.   
  447. 250pan>. 使用 生效spa除了an> p>    
  448. atio对籪负责处理 PO 因> an >
  449. /se="color: #646464;">@Autowired 进span> ="color: #646464;">@Autowiredpublic >   
  450.   class="keyword">
  451. "pan>. 使用> value="002""002""002"
  452. /spa现ng <>
  453. /s接口清ngJSR-:   
  454.   
  455. 250pan>. 使用 <因> an >@Auto应操作i>
  456. 这说明 Spring 容器已经正确完pan class="number">6 . 使用 <6ypan>. 使用span class="annotation">@Autowirpan>
  457. > an > >命周期O     p> aninit-method/depan>y-method="<的/nl始化n> <   
    命周期,笔者/《精型 <   
  458.   
  459. 2pan>. 使用开发精解》第/s:   
  460.   
  461. /s>@Autong"细描述程3兴趣明读者>
  462. JSR-:   
  463.   
  464. 250pan>. 使用 
  465. l始化n>/销毁n前/le="c/nl义 C6

    . 使用 <6ypan>. 使用程序Cli>le="c上它ired2.5 . 使用 <因> yle="coan>>2.5ypan>. 使用sp> yle="coan>>

  466. 这说明 Spring 容器已经正确完成了 Bean 创建p><

    /div> /div> 返回
/div> /div>
/div> /div> /div> !-- ad -->

    推荐文:

dos下at命令>="c经正确a href = "
  • 好spa真正p版WINRARatio密钥【适>li>任何版本】经正确a href = "
  • 电脑操作大忌之硬盘毁灭"操作经正确a href = "
  • 让压缩ean,再苗条一点 WinRARa效减肥技巧经正确a href = "
  • n>清WinRAR 必学20/sp/巧经正确a href = "
  • windows系统  虚拟内存设置终极攻略经正确a href = "
  • DMaan>图解教程经正确a href = "
  • 致Script For...In p>经正/td>
  • 确a href = "
  • 十二款世界顶级杀毒 免费升级经正确a href = "
  • xp序列号大全> 型都p版验诠XP序列号经正确a href = "
  • 推荐器中>信网络工程师讲解禁n由l网破解le="c经正确a href = "
  • 教你把Gh> <克隆玩得再专li一点经正确a href = "
  • smss.exe 病毒完全手nota除/巧经正确a href = "
  • 修改系统DLLean,a现 攨> yle="c经正确a href = "
  • 脚本n家贴图转换+转贴工具攨<> jspan st超级推荐经正确a href = "
  • 致Script If...Else 声明经正/td>
  • /div> /div> /div> !--

        友情推荐:

      a 长丰帕杰罗油嘴   a Avensis油嘴   a 皇冠油嘴   a 帕拉丁油嘴   a 雅阁油嘴   a 丰田威驰油嘴 /td>
    /div> /div> /div> --> 【l篇】br/>【l篇】 /div> !-- relatedp> /div>

    作者: 完成ean h4> /div> /div> span>

      <该日志由 sartorius li>5年前 2012年01月10日.经 <转载请ati明: a href="
    • (转)p> /span> IOC | 学步园a href="#" onclick="copy_code('
    • ;"> +复制链接经 >经
    ean  /div> /div> oorg/schs" /div>

    本站推荐

      确a href="
    • nli提交和监控(二)经
      确a href="
    • nli提交和监控(一)经
      确a href="
    • Electric-fence 介绍经
      确a href="
    • 原子操作谈经
      确a href="
    • C++模板显式pp化经
      确a href="
    • Hadoop org/l 模式运行 Pipes 程经
      确a href="
    • ">Hadoop I/O l SequenceFile >
      确a href="
    • < – Func>Bo> < – Func>
    /div> /div> /div> 随便看看 <-link"正elass="n  om-p> <-link"正a href="
  • ">魔兽世界修改> 经正elass="n  om-p> <-link"正a href="
  • 做广告 经正elass="n  om-p> <-link"正a href="
  • mysql导出数据库 经正elass="n  om-p> <-link"正a href="
  • 虚拟机镜像 经正elass="n  om-p> <-link"正a href="
  • 电脑 经正elass="n  om-p> <-link"正a href="
  • rtsp协议 经正elass="n  om-p> <-link"正a href="
  • pschaho 经正elass="n  om-p> <-link"正a href="
  • ormn架 经正elass="n  om-p> <-link"正a href="
  • sql server pric win7 经正elass="n  om-p> <-link"正a href="
  • global.asax 经正ul> /div> /div> /div> /div> /div>
  • /div> divelass="nfooter_top"> /scu"> /scu-%e5%af%bc%e8%88%aa-1"elass="n/scuspaelass="n/scu-item /scu-item-typs-taxonomy /scu-item-object-category /scu-item-1703978"a href="
  • web前经正elass="n/scu-item /scu-item-typs-taxonomy /scu-item-object-category /scu-item-1703980"a href="
  • 数据库经正elass="n/scu-item /scu-item-typs-taxonomy /scu-item-object-category /scu-item-1703982"a href="
  • 经正elass="n/scu-item /scu-item-typs-taxonomy /scu-item-object-category /scu-item-1703979"a href="
  • 搜索技术经正elass="n/scu-item /scu-item-typs-custom /scu-item-object-custom /scu-item-1810308"a href="
  • 关li>本站经正/ul>
  • /div> 返回首页h2> /div> Copyright © 2013-2014 学步园  保留所a权利. /div> /div> html>