??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品不卡在线电影,久久亚洲精品成人,亚洲综合色婷婷在线观看http://www.tkk7.com/joan/category/32988.htmlUは张で QQ:774199038zh-cnFri, 18 Sep 2009 18:12:47 GMTFri, 18 Sep 2009 18:12:47 GMT60Java 命o(h)行报错E xception in thread "main" java.lang.UnsupportedClassVersionError:http://www.tkk7.com/joan/articles/294770.htmljoanjoanFri, 11 Sep 2009 09:26:00 GMThttp://www.tkk7.com/joan/articles/294770.htmlhttp://www.tkk7.com/joan/comments/294770.htmlhttp://www.tkk7.com/joan/articles/294770.html#Feedback0http://www.tkk7.com/joan/comments/commentRss/294770.htmlhttp://www.tkk7.com/joan/services/trackbacks/294770.html好久没有命o(h)行写代码?jin),今天用?br /> 命o(h)行出错Exception in thread "main" java.lang.UnsupportedClassVersionError: Filter(Unsupp
orted major.minor version 50.0).

  一q行报main 函数出错?jin),意思是没有扑ֈmain 函数的入口。可是代码正啊。到Eclipse 下试试,一切正常,看来不是它的问题?br />

命o(h)行下输入Qjavac -version 昄Qjavac 1.4.2...    
                      java  -version 昄Qjava  1.6...   

~译和运行环境的版本怎么不一PJDK 不是明明1.6 吗?装的是jdk 1.6 的怎么变?.4 ?jin)?br /> 报错原来是用低版本的JDK~译高版本的.class׃(x)报这个错

到环境变量查看了(jin)半天也没发现问题Q忽然发现PATH中oracle中怎么?.4.2 ?jin)?img alt="" src="/CuteSoft_Client/CuteEditor/images/face7.gif" align="absMiddle" border="0" />


C:\Program Files\MySQL\MySQL Server 5.0\bin;D:\oracle\product\10.1.0\Db_4\bin;D:\oracle\product\10.1.0\Db_4\jre\1.4.2\bin\client;D:\oracle\product\10.1.0\Db_4\jre\1.4.2\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\TortoiseSVN\bin;%JAVA_HOME%\bin;%Path%

改ؓ(f)Q在PATH 最前面加上 %JAVA_HOME%\

%JAVA_HOME%\bin;C:\Program Files\MySQL\MySQL Server 5.0\bin;D:\oracle\product\10.1.0\Db_4\bin;D:\oracle\product\10.1.0\Db_4\jre\1.4.2\bin\client;D:\oracle\product\10.1.0\Db_4\jre\1.4.2\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\TortoiseSVN\bin;

再到DOS 下试?QOK Q运行通过?br /> C:\Documents and Settings\joan>javac -version
javac 1.6.0_02

C:\Documents and Settings\joan>java -version
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b05)
Java HotSpot(TM) Client VM (build 1.6.0_02-b05, mixed mode, sharing)

C:\Documents and Settings\joan>javac test.java

C:\Documents and Settings\joan>java test

C:\Documents and Settings\joan>




JDK 配置 egQ?br />

set JAVA_HOME= C:\Program Files\Java\jdk1.6.0_02

set PATH=%JAVA_HOME%\bin;%PATH%

set CLASSPATH=.;%JAVA_HOME%\lib

 

 




joan 2009-09-11 17:26 发表评论
]]>
怎样~写Action试用例 http://www.tkk7.com/joan/articles/269891.htmljoanjoanSun, 10 May 2009 05:48:00 GMThttp://www.tkk7.com/joan/articles/269891.htmlhttp://www.tkk7.com/joan/comments/269891.htmlhttp://www.tkk7.com/joan/articles/269891.html#Feedback0http://www.tkk7.com/joan/comments/commentRss/269891.htmlhttp://www.tkk7.com/joan/services/trackbacks/269891.html  1、Action层的业务逻辑比较单。大家潜意识认ؓ(f)q一部分的代码不重要?/p>

  2、Action层难以模拟httph传递参敎ͼ需要依赖web容器Q因此给单元试~写带来一定的隑ֺ?/p>

  下面是一个简单的Action单元试用例Q供大家参考。基于struts的mock和webwork的ActionProxyFactory都可以进行Action的单元测试。我个h比较們֐与ActionProxyFactory做单元测试。其实写action单元试非常单,大致分ؓ(f)三步可以完成单元测试:(x)

  一、设|ActionContext上下文参?/p>

  表单传递的h参数d到map?/p>

  二、创建Action动态代理对?/p>

  通过public abstract ActionProxy createActionProxy(String namespace, String actionName, Map extraContext) throws Exception 创徏action代理对象?/p>

  三、junit断言执行l果

assertEquals(testAction.login(),”success”)

  详细用例参?

  public class TestActionTest extends BaseCaseTest{

  private ActionProxy proxy = null;

  private IVoucherService voucherService;

  @Before

  public void setUp() throws Exception {

  IMocksControl control = EasyMock.createControl();

  voucherService = control.createMock(IVoucherService.class);

  Map<String, Object> params = new HashMap<String, Object>();

  params.put(”loginId”,”test”);

  params.put(”password”,”111111″);

  params.put(”voucherService”, voucherService);

  Map extraContext = new HashMap();

  extraContext.put(ActionContext.PARAMETERS,params);

  try {

  proxy = ActionProxyFactory.getFactory().createActionProxy(”/user”, “testAction”, extraContext);

  proxy.setExecuteResult(false);

  assertEquals(proxy.execute(),”success”);

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  @Test

  public void testLogin() {

  TestAction testAction = (TestAction) proxy.getAction();

  assertEquals(testAction.login(),”success”);

  }

  }

  注:(x)创徏代理action一定要执行proxy.execute()Ҏ(gu)Q否则参C能够增加到actionContext上下文中。因?proxy.execute()中会(x)执行 invocation.invoke()核心(j)Ҏ(gu)Q遍历执行action中所有的拦截器,包括其中的参数拦截器?br /> Q{载)(j)Qtestage.net



joan 2009-05-10 13:48 发表评论
]]>
Annotation 手册http://www.tkk7.com/joan/articles/247211.htmljoanjoanThu, 18 Dec 2008 12:56:00 GMThttp://www.tkk7.com/joan/articles/247211.htmlhttp://www.tkk7.com/joan/comments/247211.htmlhttp://www.tkk7.com/joan/articles/247211.html#Feedback0http://www.tkk7.com/joan/comments/commentRss/247211.htmlhttp://www.tkk7.com/joan/services/trackbacks/247211.html版权声明Q本文可以自p{载,转蝲时请务必以超链接形式标明文章原始出处和作者信息及(qing)本声?/span>
作?cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig)
原文:http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html
关键?java,annotation,reflect



阅读提示Q文中提到的E序成员或者程序元素是一个概念,指组成程序代码的单元Q如cR方法、成员变量?/span>

一、AnnotationI竟是什么?

Annotation提供?jin)一条与E序元素兌M信息或者Q何元数据QmetadataQ的途径。从某些斚w看,annotation像修饰W一栯使用Qƈ应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在annotation?#8220;name=value”l构对中。annotationcd是一U接口,能够通过java反射API的方式提供对其信息的讉K?br />
annotation能被用来为某个程序元素(cR方法、成员变量等Q关联Q何的信息。需要注意的是,q里存在着一个基本的潜规则:(x)annotaion不能影响E序代码的执行,无论增加、删除annotationQ代码都始终如一的执行。另外,管一些annotation通过java的反apiҎ(gu)在运行时被访问,而java语言解释器在工作时忽略了(jin)q些annotation。正是由于java虚拟机忽略了(jin)annotationQ导致了(jin)annotationcd在代码中?#8220;不v作用”的;只有通过某种配套的工h?x)对annotationcd中的信息q行讉K和处理。本文中涵盖标准的annotation和meta-annotationcdQ陪伴这些annotationcd的工hjava~译器(当然要以某种Ҏ(gu)的方式处理它们)(j)?br />
׃上述原因Qannotation在用时十分ѝ一个本地变量可以被一个以NonNull命名的annotationcd所标注Q来作ؓ(f)对这个本地变量不能被赋予null值的断言。而我们可以编写与之配套的一个annotation代码分析工具Q用它来对h前面变量的代码进行解析,q且试验证q个断言。当然这些代码ƈ不必自己~写。在JDK安装后,在JDK/bin目录中可以找到名?#8220;apt”的工P它提供了(jin)处理annotation的框Ӟ(x)它启动后扫描源代码中的annotationQƈ调用我们定义好的annotation处理器完成我们所要完成的工作Q比如验证前面例子中的断aQ。说到这里,annotation的强大功能似乎可以替代XDocletq类的工具了(jin)Q随着我们的深入,大家?x)更加坚信这一炏V?br /> 注:(x)详细描述请参看jsr250规范Q?br /> http://www.jcp.org/aboutJava/communityprocess/pfd/jsr250/

二、Annotation的定义:(x)

q段文字开始介lannotation相关技术。在此大家将看到java5.0的标准annotationcdQ这U标准类型就是前文中所说的“内徏”cdQ它们可以直接被javac支持。可喜的是,在java6.0beta版中的javac已经加入?jin)对自定义annotation的支持?br />
1。Annotation的概念和语法Q?/span>

首先Q关键的概念是理解annotation是与一个程序元素相兌信息或者元数据的标注。它从不影响javaE序的执行,但是对例如编译器警告或者像文档生成器等辅助工具产生影响?br />
下面是常用的annotation列表Q我们应该注意在annotation和annotationcd之间的不同:(x)

A.annotationQ?/span>
annotation使用?jin)在java5.0所带来的新语法Q它的行为十分类似public、finalq样的修饰符。每个annotationh一个名字和成员?sh)?gt;=0。每个annotation的成员具有被UCؓ(f)name=value对的名字和|像javabean一P(j)Qname=value装蝲?jin)annotation的信息?br />
B.annotationcdQ?/span>
annotationcd定义?jin)annotation的名字、类型、成员默认倹{一个annotationcd可以说是一个特D的java接口Q它的成员变量是受限制的Q而声明annotationcd旉要用新语法。当我们通过java反射api讉Ka(chn)nnotationӞq回值将是一个实C(jin)该annotationcd接口的对象,通过讉Kq个对象我们能方便的讉K到其annotation成员。后面的章节提到在java5.0的java.lang包里包含?个标准annotationcd?br />
C.annotation成员Q?/span>
annotation的成员在annotationcd中以无参数的Ҏ(gu)的Ş式被声明。其Ҏ(gu)名和q回值定义了(jin)该成员的名字和类型。在此有一个特定的默认语法Q允许声明Q何annotation成员的默认|(x)一个annotation可以name=value对作为没有定义默认值的annotation成员的|当然也可以用name=valueҎ(gu)覆盖其它成员默认倹{这一Ҏ(gu)些近似类的(h)承特性,父类的构造函数可以作为子cȝ默认构造函敎ͼ但是也可以被子类覆盖?br />
D.marker annotationcdQ?/span>
一个没有成员定义的annotationcd被称为marker annotation。这Uannotationcd仅用自w的存在与否来ؓ(f)我们提供信息。如后面要说的Override?br />
E.meta-annotationQ?/span>
meta-annotation也称为元annotationQ它是被用来声明annotationcd的annotation。Java5.0提供?jin)一些标准的?annotationcd。下面介l的target、retention是meta-annotation?br />
F.targetQ?/span>
annotation的target是一个被标注的程序元素。target说明?jin)annotation所修饰的对象范_(d)(x)annotation可被用于packages、typesQ类、接口、枚举、annotationcdQ、类型成员(Ҏ(gu)、构造方法、成员变量、枚丑ր|(j)、方法参数和本地变量Q如循环变量、catch参数Q。在annotationcd的声明中使用?jin)target可更加明晰其修饰的目标?br />
G.retentionQ?/span>
annotation的retention定义?jin)该annotation被保留的旉长短Q某些annotation仅出现在源代码中Q而被~译器丢弃;而另一些却被编译在class文g中;~译在class文g中的annotation可能?x)被虚拟机忽略,而另一些在class被装载时被dQ请注意q不影响class的执行,因ؓ(f)annotation与class在用上是被分离的)(j)。用这个meta-annotation可以对annotation?#8220;生命周期”限制?br />
H.metadataQ?/span>
׃metadata被广泛用于各种计算机开发过E中Q所以当我们在这里谈论的metadata卛_数据通常指被annotation装蝲的信息或者annotation本n?br />
2。用标准AnnotationQ?/span>
java5.0在java.lang包中定义?U标准的annotationcdQ?br />
A.OverrideQ?/span>
java.lang.Override是一个marker annotationcdQ它被用作标注方法。它说明?jin)被标注的方法重载?jin)父类的方法,起到?jin)断a的作用。如果我们用了(jin)q种annotation在一个没有覆盖父cL法的Ҏ(gu)Ӟjava~译器将以一个编译错误来警示?br /> q个annotaton常常在我们试图覆盖父cL法而确又写错了(jin)Ҏ(gu)名时发挥威力?br />
使用Ҏ(gu)极其单:(x)在用此annotation时只要在被修饰的Ҏ(gu)前面加上@Override?br /> 下面的代码是一个用@Override修饰一个企N载父cȝtoStringҎ(gu)Q而又存在拼写错误的sampleQ?br /> 清单1Q?/strong>

@Override
public String toSting() {   // 注意Ҏ(gu)名拼写错?br />     return "[" + super.toString() + "]";
}


B.DeprecatedQ?/span>
同样Deprecated也是一个marker annotation。当一个类型或者类型成员(sh)用@Deprecated修饰的话Q编译器不鼓励使用q个被标注的E序元素。而且q种修饰h一定的“延箋(hu)?#8221;Q如果我们在代码中通过l承或者覆盖的方式使用?jin)这个过时的cd或者成员,虽然l承或者覆盖后的类型或者成员ƈ不是被声明ؓ(f)@DeprecatedQ但~译器仍然要报警?br /> 值得注意Q@Deprecatedq个annotationcd和javadoc中的@deprecatedq个tag是有区别的:(x)前者是java~译器识别的Q而后者是被javadoc工具所识别用来生成文档Q包含程序成员(sh)ؓ(f)什么已l过时、它应当如何被禁止或者替代的描述Q?br /> 在java5.0Qjava~译器仍然象其从前版本那样寻找@deprecatedq个javadoc tagQƈ使用它们产生警告信息。但是这U状况将在后l版本中改变Q我们应在现在就开始用@Deprecated来修饰过时的Ҏ(gu)而不是@deprecated javadoc tag?br /> 清单2Q?/strong>

下面是一D用@Deprecated的代码:(x)
/**
* q里是javadoc的@deprecated声明.
* @deprecated No one has players for this format any more.  Use VHS instead.
*/
@Deprecated public class Betamax { ... }


C.SuppressWarningsQ?/span>
@SuppressWarnings被用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。在java5.0Qsun提供的javac~译器ؓ(f)我们提供?Xlint选项来ɾ~译器对合法的程序代码提?gu)告,此种警告从某U程度上代表?jin)程序错误。例如当我们使用一个generic collectionc而又没有提供它的cdӞ~译器将提示?unchecked warning"的警告?br />
通常当这U情况发生时Q我们就需要查扑ּ赯告的代码。如果它真的表示错误Q我们就需要纠正它。例如如果警告信息表明我们代码中的switch语句没有覆盖所有可能的caseQ那么我们就应增加一个默认的case来避免这U警告?br /> 总Q有时我们无法避免这U警告,例如Q我们用必d非generic的旧代码交互的generic collectioncLQ我们不能避免这个unchecked warning。此时@SuppressWarningpz上用场?jin),在调用的?gu)前增加@SuppressWarnings修饰Q告诉编译器停止Ҏ(gu)Ҏ(gu)的警告?br /> SuppressWarning不是一个marker annotation。它有一个类型ؓ(f)String[]的成员,q个成员的gؓ(f)被禁止的警告名。对于javac~译器来Ԍ?Xlint选项有效的警告名也同样对@SuppressWarings有效Q同时编译器忽略掉无法识别的警告名?br />
annotation语法允许在annotation名后跟括P括号中是使用逗号分割的name=value对用于ؓ(f)annotation的成员赋|(x)
清单3Q?/strong>

@SuppressWarnings(value={"unchecked","fallthrough"})
public void lintTrap() { /* sloppy method body omitted */ }


在这个例子中SuppressWarnings annotationcd只定义了(jin)一个单一的成员,所以只有一个简单的value={...}作ؓ(f)name=value寏V又׃成员值是一个数l,故用大括号来声明数l倹{?br />
注意Q我们可以在下面的情况中~写annotationQ当annotation只有单一成员Qƈ成员命名?value="。这时可以省?value="。比如将上面的SuppressWarnings annotationq行~写Q?br /> 清单4Q?/strong>

@SuppressWarnings({"unchecked","fallthrough"})

如果SuppressWarnings所声明的被止警告个数Z个时Q可以省d括号Q?br />

@SuppressWarnings("unchecked")


3。Annotation语法Q?/span>

在上一个章节中Q我们看C写marker annotation和单一成员annotation的语法。下面本人来介绍一下完整的语法Q?br />
annotation?#8220;@+annotationcd名称+(..逗号分割的name-value?..)”l成。其中成员可以按照Q何的序。如果annotationcd定义?jin)某个成员的默认|则这个成员可以被省略。成员值必Mؓ(f)~译时常量、内嵌的annotation或者数l?br />
下面我们定义一个annotationcd名ؓ(f)ReviewsQ它有一个由@Review annotation数组构成的成员。这个@Review annotationcd有三个成员:(x)"reviewer"是一个字W串Q?comment" 是一个具有默认值的可选的字符Ԍ"grade"是一个Review.Grade枚Dcd倹{?br /> 清单5Q?/strong>

@Reviews({  // Single-value annotation, so "value=" is omitted here
    @Review(grade=Review.Grade.EXCELLENT,
            reviewer="df"),
    @Review(grade=Review.Grade.UNSATISFACTORY,
            reviewer="eg",
            comment="This method needs an @Override annotation")
})

annotation语法的另一个重要规则是没有E序成员可以有多于一个的同一annotation实例。例如在一个类中简单的攄多个@Review annotation。这也是在上面代码中定义@Reviews annotationcd数组的原因?br />
4。Annotation成员cd和|(x)

annotation成员必须是非I的~译时常量表辑ּ。可用的成员cd为:(x)primitivecd? String, Class, enumeratedcd, annotationcd, 和前面类型的数组?br />
下面我们定义?jin)一个名为UncheckedExceptions 的annotationcdQ它的成员是一个扩展了(jin)RuntimeExceptioncȝcLl?br /> 清单6Q?/strong>

@UncheckedExceptions({
    IllegalArgumentException.class, StringIndexOutOfBoundsException.class
})


5。Annotation的目标:(x)

annotation通常被放在类型定义和成员定义的前面。然而它也出现在package、方法参数、本地变量的前面。下面,我们来讨Z下这些不大常用的写法Q?br />
package annotation出现在package声明的前面?br /> 下面的例子package-info.java中不包含M的公q型定义,却包含一个可选的javadoc注释?br /> 清单7Q?/strong>

/**
* This package holds my custom annotation types.
*/
@com.davidflanagan.annotations.Author("David Flanagan")
package com.davidflanagan.annotations;

当package-info.java文g被编译时Q它?yu)生名为包含annotationQ特D的接口Q声明的package-info.class的类。这个接口没有成员,它的名字package-info不是一个合法的java标识Q所以它不能用在java源代码中。这个接口的存在只是单的被看作一个ؓ(f)package annotation准备的占位符?br />
用于修饰Ҏ(gu)参数、catch参数、本地变量的annotation只是单的出现在这些程序成员的修饰W位|。javacL件格式没有ؓ(f)本地变量或者catch参数存储annotation作准备,所以这些annotationL保留在源代码U别Qsource retentionQ;Ҏ(gu)参数annotation能够保存在类文g中,也可以在保留到运行时?br />
最后,h意,枚Dcd定义中不允许M的修饰符修饰其枚丑ր{?br />
6。Annotation和默认|(x)
在Annotation中,没有默认值的成员必须有一个成员倹{而如何理解默认值是如何被处理就是一个很重要的细节:(x)annotationcd所定义的成员默认D存储在class文g中,不被~译到annotation里面。如果我们修改一个annotationcd使其成员的默认值发生了(jin)改变Q这个改变对于所有此cd的annotation中没有明提供成员值的成员?sh)生影响Q即修改?jin)该成员的成员|(j)。即使在annotationcd使其成员的默认D改变后annotation从没被重新编译过Q该cd的annotation(改变前已l被~译?也受到媄(jing)响?br />
三、Annotation工作原理Q?/span>

Annotation与反?/span>
在java5.0中Java.lang.reflect提供的反API被扩充了(jin)dq行时annotation的能力。让我们回顾一下前面所讲的Q一个annotationcd被定义ؓ(f)runtime retention后,它才是在q行时可见,当class文g被装载时被保存在class文g中的annotation才会(x)被虚拟机d。那么reflect是如何帮助我们访问class中的annotation呢?

下文在java.lang.reflect用于annotation的新Ҏ(gu),其中java.lang.reflect.AnnotatedElement是重要的接口Q它代表?jin)提供查询annotation能力的程序成员。这个接口被java.lang.Package、java.lang.Class实现Qƈ间接地被MethodcRConstructorcRjava.lang.reflect的Fieldcd现。而annotation中的Ҏ(gu)参数可以通过MethodcRConstructorcȝgetParameterAnnotations()Ҏ(gu)获得?br />
下面的代码用了(jin)AnnotatedElementcȝisAnnotationPresent()Ҏ(gu)判断某个Ҏ(gu)是否h@Unstable annotationQ从而断a此方法是否稳定:(x)
清单8Q?/strong>

import java.lang.reflect.*;

Class c = WhizzBangClass.class;                          
Method m = c.getMethod("whizzy", int.class, int.class);  
boolean unstable = m.isAnnotationPresent(Unstable.class);

isAnnotationPresent()Ҏ(gu)对于(g)查marker annotation是十分有用的Q因为marker annotation没有成员变量Q所以我们只要知道class的方法是否用了(jin)annotation修饰可以了(jin)。而当处理h成员的annotationӞ我们通过使用getAnnotation()Ҏ(gu)来获得annotation的成员(sh)息(成员名称、成员|(j)。这里我们看C(jin)一套优的java annotationpȝQ如果annotation存在Q那么实C(jin)相应的annotationcd接口的对象将被getAnnotation()Ҏ(gu)q回Q接着调用定义在annotationcd中的成员Ҏ(gu)可以方便地获得Q何成员倹{?br />
回想一下,前面介绍的@Reviews annotationQ如果这个annotationcd被声明ؓ(f)runtime retention的话Q我们通过下面的代码来讉K@Reviews annotation的成员|(x)
清单9Q?/strong>

AnnotatedElement target = WhizzBangClass.class; //获得被查询的AnnotatedElement
// 查询AnnotatedElement的@Reviews annotation信息
Reviews annotation = target.getAnnotation(Reviews.class);
// 因ؓ(f)@Reviews annotationcd的成员(sh)ؓ(f)@Review annotationcd的数l,
// 所以下面声明了(jin)Review[] reviews保存@Reviews annotationcd的value成员倹{?br /> Review[] reviews = annotation.value();
// 查询每个@Review annotation的成员(sh)?br /> for(Review r : reviews) {
    Review.Grade grade = r.grade();
    String reviewer = r.reviewer();
    String comment = r.comment();
    System.out.printf("%s assigned a grade of %s and comment '%s'%n",
                      reviewer, grade, comment);
}


四、如何自定义AnnotationQ?/span>

1Q详解annotation与接口的异同Q?/span>
因ؓ(f)annotationcd是一个非凡的接口Q所以两者之间存在着某些差异Q?br />
A.Annotationcd使用关键字@interface而不是interface?/span>
q个关键字声明隐含了(jin)一个信息:(x)它是l承?jin)java.lang.annotation.Annotation接口Qƈ非声明了(jin)一个interface?br />
B.Annotationcd、方法定义是独特的、受限制的?/span>
Annotationcd的方法必d明ؓ(f)无参数、无异常抛出的。这些方法定义了(jin)annotation的成员:(x)Ҏ(gu)名成Z(jin)成员名,而方法返回值成Z(jin)成员的类型。而方法返回值类型必Mؓ(f)primitivecd、Classcd、枚丄型、annotationcd或者由前面cd之一作ؓ(f)元素的一l数l。方法的后面可以使用default和一个默认数值来声明成员的默认|null不能作ؓ(f)成员默认|q与我们在非annotationcd中定义方法有很大不同?br /> Annotationcd和它的方法不能用annotationcd的参数、成员(sh)能是generic。只有返回值类型是Class的方法可以在annotationcd中用genericQ因为此Ҏ(gu)能够用类转换各U类型{换ؓ(f)Class?br />
C.Annotationcd又与接口有着q似之处?/span>
它们可以定义帔R、静(rn)态成员类型(比如枚Dcd定义Q。Annotationcd也可以如接口一般被实现或者(h)ѝ?br />
2Q实例:(x)
下面Q我们将看到如何定义annotationcd的example。它展示?jin)annotationcd声明以及(qing)@interface与interface之间的不同:(x)
清单10Q?/strong>

package com.davidflanagan.annotations;
import java.lang.annotation.*;

/**
* 使用annotation来描q那些被标注的成员是不稳定的Q需要更?br /> */
@Retention(RetentionPolicy.RUNTIME)
public @interface Unstable {}


下面的另一个example只定义了(jin)一个成员。ƈ通过这个成员命名ؓ(f)valueQ我们可以方便的用这Uannotation的快捷声明方式:(x)
清单11Q?/strong>

/**
* 使用Authorq个annotation定义在程序中指出代码的作?br /> */
public @interface Author {
    /** q回作者名 */
    String value();
}


以下的example更加复杂。Reviews annotationcd只有一个成员,但是q个成员的类型是复杂的:(x)由Review annotationl成的数l。Review annotationcd?个成员:(x)枚Dcd成员grade、表CReview名称的字W串cd成员Reviewer、具有默认值的字符串类型成员Comment?br /> 清单12Q?/strong>

import java.lang.annotation.*;
        
/**
* Reviews annotationcd只有一个成员,
* 但是q个成员的类型是复杂的:(x)由Review annotationl成的数l?br /> */
@Retention(RetentionPolicy.RUNTIME)
public @interface Reviews {
    Review[] value();
}

/**
* Review annotationcd?个成员:(x)
* 枚Dcd成员grade?br />   * 表示Review名称的字W串cd成员Reviewer?br />   * h默认值的字符串类型成员Comment?br /> */
public @interface Review {
    // 内嵌的枚丄?br />     public static enum Grade { EXCELLENT, SATISFACTORY, UNSATISFACTORY };

    // 下面的方法定义了(jin)annotation的成?br />     Grade grade();                
    String reviewer();          
    String comment() default "";  
}


最后,我们来定义一个annotationҎ(gu)用于|列出类q行中所有的unchecked异常Q上文已l提到这U情况不一定是错误Q。这个annotationcd一个数l作Z(jin)唯一的成员。数l中的每个元素都是异常类。ؓ(f)?jin)加强对未检查的异常Q此cd帔R是在q行时抛出)(j)q行报告Q我们可以在代码中对异常的类型进行限Ӟ(x)
清单13Q?/strong>

public @interface UncheckedExceptions {
    Class<? extends RuntimeException>[] value();
}


五、Meta-Annotation

Annotationcd可以被它们自己所标注。Java5.0定义?个标准的meta-annotationcdQ它们被用来提供对其它annotationcd作说明。这些类型和它们所支持的类在java.lang.annotation包中可以扑ֈ。如果需要更详细的信息可以参考jdk5.0手册?br />
1Q再谈Target
作ؓ(f)meta-annotationcd的Target,它描qC(jin)annotation所修饰的程序成员的cd。当一个annotationcd没有TargetӞ它将被作为普通的annotation看待。当它修饰一个特定的E序成员Ӟ它将发挥其应用的作用Q例如:(x)Override用于修饰Ҏ(gu)Ӟ增加?jin)@Targetq个meta-annotation׃ɾ~译器对annotation作检查,从而去掉修饰错误类型的Override?br />
Target meta-annotationcd有唯一的value作ؓ(f)成员。这个成员的cd是java.lang.annotation.ElementType[]cd的,ElementTypecd是可以被标注的程序成员的枚Dcd?br />
2QRetention的用?/span>
我们在文章的开头曾l提到过RetentionQ但是没有详l讲解。Retention描述?jin)annotation是否被编译器丢弃或者保留在class文gQ如果保留在class文g中,是否在class文g被装载时被虚拟机d。默认情况下Qannotation被保存在class文g中,但在q行时ƈ不能被反访问。Retentionh三个取|(x)source、class、runtimeQ这些取值来自java.lang.annotation.RetentionPolicy的枚丄型倹{?br />
Retention meta-annotationcd有唯一的value作ؓ(f)成员Q它的取值来自java.lang.annotation.RetentionPolicy的枚丄型倹{?br />
3QDocumented
Documented是一个meta-annotationcdQ用于描q其它类型的annotation应该被作标注的程序成员的公共APIQ因此可以被例如javadoc此类的工h档化?br />
Documented是一个marker annotationQ没有成员?br />
4QInherited
@Inherited meta-annotation也是一个marker annotationQ它阐述?jin)某个被标注的类型是被?h)承的。如果一个用了(jin)@Inherited修饰的annotationcd被用于一个classQ则q个annotation被用于该class的子cR?br />
注意Q@Inherited annotationcd是被标注q的class的子cLl承。类q不从它所实现的接口(h)承annotationQ方法ƈ不从它所重蝲的方法(h)承annotation?br />
值得思考的是,当@Inherited annotationcd标注的annotation的Retention是RetentionPolicy.RUNTIMEQ则反射API增强?jin)这U(h)承性。如果我们用java.lang.reflectL询一个@Inherited annotationcd的annotationӞ反射代码(g)查将展开工作Q检查class和其父类Q直到发现指定的annotationcd被发玎ͼ或者到辄l承l构的顶层?br />
六、ȝQ?/span>

本文几乎覆盖?jin)所有的Annotation的概念和知识点,从annotation的定义、语法到工作原理、如何自定义annotationQ直至meta-annotation。其中也h一些配套的代码片断可参考,虽然不是很多Q但是可谓言意赅、着光点,本h认ؓ(f)用好annotation的关键还在于使用。希望本手册能够帮助大家用好annotationQ这也是本h的最大快乐?br />

joan 2008-12-18 20:56 发表评论
]]>
Spring,hibernate,struts的面试笔试题Q含{案Q?http://www.tkk7.com/joan/articles/245101.htmljoanjoanMon, 08 Dec 2008 13:06:00 GMThttp://www.tkk7.com/joan/articles/245101.htmlhttp://www.tkk7.com/joan/comments/245101.htmlhttp://www.tkk7.com/joan/articles/245101.html#Feedback0http://www.tkk7.com/joan/comments/commentRss/245101.htmlhttp://www.tkk7.com/joan/services/trackbacks/245101.html 原理Q?
1.dq解析配|文?
2.dq解析映信息,创徏S(chng)essionFactory
3.打开Sesssion
4.创徏事务Transation
5.持久化操?
6.提交事务
7.关闭Session
8.关闭SesstionFactory

Z么要用:(x)
1.    对JDBC讉K数据库的代码做了(jin)装Q大大简化了(jin)数据讉K层繁琐的重复性代码?

2.    Hibernate是一个基于JDBC的主持久化框架Q是一个优U的ORM实现。他很大E度的简化DAO层的~码工作

3.    hibernate使用Java反射机制Q而不是字节码增强E序来实现透明性?

4.    hibernate的性能非常好,因ؓ(f)它是个轻量框架。映的灉|性很?gu)。它支持各种关系数据库,从一对一到多对多的各U复杂关pR?

2Q?Hibernate是如何gq加?
1.  Hibernate2延迟加蝲实现Qa)实体对象 b)集合QCollectionQ?

2. Hibernate3 提供?jin)属性的延迟加蝲功能

当Hibernate在查询数据的时候,数据q没有存在与内存?sh),当程序真正对数据的操作时Q对象才存在与内存(sh)Q就实现?jin)gq加载,他节省了(jin)服务器的内存开销Q从而提高(sh)(jin)服务器的性能?

3QHibernate中怎样实现cM间的关系?(如:(x)一对多、多对多的关p?

cMcM间的关系主要体现在表与表之间的关p进行操作,它们都市(jng)对对象进行操作,我们E序中把所有的表与c都映射在一P它们通过配置文g中的many-to-one、one-to-many、many-to-many?

4Q?说下Hibernate的缓存机?

1. 内部~存存在Hibernate中又叫一U缓存,属于应用事物U缓?

2. 二~存Q?
a) 应用?qing)缓?
b) 分布式缓?
条gQ数据不?x)被W三方修攏V数据大在可接受范围、数据更新频率低、同一数据被系l频J用、非              关键数据
c) W三方缓存的实现

5Q?Hibernate的查询方?
Sql、Criteria,object comptosition
HqlQ?
1?属性查?
2?参数查询、命名参数查?
3?兌查询
4?分页查询
5?l计函数

6Q?如何优化HibernateQ?
1.使用双向一对多兌Q不使用单向一对多
2.灉|使用单向一对多兌
3.不用一对一Q用多对一取代
4.配置对象~存Q不使用集合~存
5.一对多集合使用Bag,多对多集合用Set
6. l承cM用显式多?
7. 表字D要,表关联不要怕多Q有二~存撑腰


7Q?Struts工作机制Qؓ(f)什么要使用StrutsQ?
工作机制Q?
Struts的工作流E?
在web应用启动时就?x)加载初始化ActionServlet,ActionServlet?
struts-config.xml文g中读取配|信?把它们存攑ֈ各种配置对象
当ActionServlet接收C个客戯求时,执行如下流E?
    -(1)(g)索和用户h匚w的ActionMapping实例,如果不存?p回请求\径无效信?
    -(2)如果ActionForm实例不存?创Z个ActionForm对象,把客h交的表单数据保存到ActionForm对象?
    -(3)Ҏ(gu)配置信息军_是否需要表单验?如果需要验?p用ActionForm的validate()Ҏ(gu);
    -(4)如果ActionForm的validate()Ҏ(gu)q回null或返回一个不包含ActionMessage的ActuibErrors对象, pC单验证成?
    -(5)ActionServletҎ(gu)ActionMapping所包含的映信息决定将h转发l哪个Action,如果相应?nbsp;                   Action实例不存?先创徏q个实例,然后调用Action的execute()Ҏ(gu);
    -(6)Action的execute()Ҏ(gu)q回一个ActionForward对象,ActionServlet在把客户h转发l?ActionForward对象指向的JSPlg;
    -(7)ActionForward对象指向JSPlg生成动态网?q回l客?

Z么要用:(x)
JSP、Servlet、JavaBean技术的出现l我们构建强大的企业应用pȝ提供?jin)可能。但用这些技术构建的pȝ非常的繁乱,所以在此之上,我们需要一个规则、一个把q些技术组lv来的规则Q这是框架QStruts便应q而生?

ZStruts开发的应用?cȝ件构成:(x)控制器组件、模型组件、视囄?

8Q?Struts的validate框架是如何验证的Q?
在struts配置文g中配|具体的错误提示Q再在FormBean中的validate()Ҏ(gu)具体调用?

9Q?说下Struts的设计模?
MVC模式: web应用E序启动时就?x)加载ƈ初始化ActionServler。用h交表单时Q一个配|好的ActionForm对象被创建,q被填入表单相应的数据,ActionServlerҎ(gu)Struts-config.xml文g配置好的讄军_是否需要表单验证,如果需要就调用ActionForm的ValidateQ)(j)验证后选择请求发送到哪个ActionQ如果Action不存在,ActionServlet?x)先创徏q个对象Q然后调用Action的executeQ)(j)Ҏ(gu)。ExecuteQ)(j)从ActionForm对象中获取数据,完成业务逻辑Q返回一个ActionForward对象QActionServlet再把客户h转发lActionForward对象指定的jsplgQActionForward对象指定的jsp生成动态的|页Q返回给客户?

10Q?spring工作机制?qing)?f)什么要?
1.spring mvch有的h都提交给DispatcherServlet,它会(x)委托应用pȝ的其他模块负责负责对hq行真正的处理工作?
2.DispatcherServlet查询一个或多个HandlerMapping,扑ֈ处理h的Controller.
3.DispatcherServlet误求提交到目标Controller
4.Controllerq行业务逻辑处理后,?x)返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析?扑ֈModelAndView对象指定的视囑֯?
6.视图对象负责渲染q回l客L(fng)?

Z么用Q?
{AOP 让开发h员可以创建非行ؓ(f)性的x(chng)点,UCؓ(f)横切x(chng)点,q将它们插入到应用程序代码中。?AOP 后,公共服务  Q比 如日志、持久性、事务等Q就可以分解成方面ƈ应用到域对象上,同时不会(x)增加域对象的对象模型的复杂性?
    IOC 允许创徏一个可以构造对象的应用环境Q然后向q些对象传递它们的协作对象。正如单?倒置 所表明的,IOC 像?q来?JNDI。没有用一堆抽象工厂、服务定位器、单元素QsingletonQ和直接构造(straight constructionQ,每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaboratorQ?
Spring即一个AOP框架Q也是一IOC容器?Spring 最好的地方是它有助于?zhn)替换对象。有?SpringQ只要用 JavaBean 属性和配置文g加入依赖性(协作对象Q。然后可以很Ҏ(gu)地在需要时替换hcM接口的协作对象。}(cng)


joan 2008-12-08 21:06 发表评论
]]>
构徏linux下IDE环境--Eclipse?/title><link>http://www.tkk7.com/joan/articles/232598.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Mon, 06 Oct 2008 01:44:00 GMT</pubDate><guid>http://www.tkk7.com/joan/articles/232598.html</guid><wfw:comment>http://www.tkk7.com/joan/comments/232598.html</wfw:comment><comments>http://www.tkk7.com/joan/articles/232598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/joan/comments/commentRss/232598.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/joan/services/trackbacks/232598.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="0" width="90%" align="center" border="0"> <tbody> <tr> <th class="f24"> <h1><span style="color: #000000"><span style="color: #003366">构徏linux下IDE环境--Eclipse?/span></span></h1> </th> </tr> <tr> <td align="center" height="20"><span style="color: #000000"></span></td> </tr> <tr> <td><span style="color: #000000"><br /> </span></td> </tr> <tr> <td class="l17"><font class="f14" id="zoom"><font color="#cccccc"><!-- 正文begin --><!--startfragment --><span style="color: #000000"><span style="color: #003366"> <br /> <!-- message --></span></span> <div><span style="color: #000000"><span style="color: #003366">摘要 <br /> <br /> Eclipse是一由ibmQborland{资助的开源开发环境;其功能可以通过插g方式q行扩展Q本文在linux下构建java、c、cQ+的IDE?<br /> <br /> 我用的环境是 red hat linux 9 Q自~译gnome2.4Q?<br /> <br /> 一Q下载所需软gQ所有下载的软g均放?opt下)(j) <br /> <br /> 先下?EclipseQ网址?</span></span><a target="_blank"><span style="color: #000000"><span style="color: #003366">http://www.eclipse.org</span></span></a><span style="color: #000000"><span style="color: #003366"> 目前QEclipse的最新版本ؓ(f)2.1.1Q?.0版也正在试中。我使用eclipse2.1Q下载其gtk版本Qeclipse-SDK-2.1.1-linux-gtk.zip <br /> <br /> 执行 Eclipse是须用到JDKQ但Eclipse的安装程序和Red Hat Linux 9 里没有包含JDKQSun 最新版本的 JDK可到 </span></span><a target="_blank"><span style="color: #000000"><span style="color: #003366">http://java.sun.com下蝲Q在此我们用的是sun</span></span></a><span style="color: #000000"><span style="color: #003366"> jdk (J2SE) 1.4.2_01版(也可使用IBM的jdkQ?<br /> <br /> 要在Eclipse 上面开发C/C++E序Q需要另外安装plug-insQ在此我们用的是C/C++ Development ToolsQCDTQ。CDT 整合?jin)gcc、make、gdb{GUN 工具Q(CDT 与Eclipse 中内建的JDTQJava 开发环境)(j)比v来,功能q差得远。例如,在JDT 中相当好用的Refactor、Refactoring、Organize Imports{在CDT 中都没有。)(j)CDT 可从</span></span><a target="_blank"><span style="color: #000000"><span style="color: #003366">http://www.eclipse.org/cdt/</span></span></a><span style="color: #000000"><span style="color: #003366"> 下蝲Q目前最新版本ؓ(f)CDT 1.1 GA2 . <br /> <br /> ?Q安?<br /> <br /> 1.׃cdt需要gcc{工P所以要先把red hat9的Y件开发包装上Q?<br /> <br /> 2.安装JDKQ需以rootw分安装Q:(x) <br /> <br /> [root@redarmy] chmod Qx j2sdk-1_4_2_01-linux-i586-rpm.bin<br /> [root@redarmy] ./j2sdk-1_4_2_01-linux-i586-rpm.bin<br /> [root@redarmy] rpm –ivh j2sdk-1_4_2_01-linux-i586-rpm.bin<br /> <br /> <br /> <br /> 安装好的JDK ?x)存?/usr/java/j2sdk1.4.2_01 目录中?<br /> <br /> 讑֮JAVA_HOME,CLASSPATH,PATH; ?etc/profile文g最后加如下四行Q?<br /> <br /> export JAVA_HOME = /usr/java/j2sdk1.4.2_01 <br /> export PATH = $JAVA_HOME/bin:$PATH<br /> CLASSPATH=.:/usr/java/j2sdk1.4.2_01/lib/tools.jar:$CLASSPATH<br /> export CLASSPATH<br /> <br /> <br /> <br /> 3.安裝Eclipse <br /> <br /> 在此我把Eclipse安装?/opt 下,安装Eclipse很简单,只要把下载回来的压羃包解压就可以?jin);解压后得到eclipse目录Q?<br /> <br /> [root@redarmy] unzip –d /opt eclipse-SDK-2.1.1-linux-gtk.zip <br /> <br /> 每一个帐号都可以执行EclipseQ我写了(jin)个小脚本Qeclipse.shQ:(x) <br /> <br /> #!/bin/bash<br /> #<br /> # 执行 eclipse 2.1.1 <br /> #<br /> export JAVA_HOME=/usr/java/j2sdk1.4.2_01<br /> export CLASSPATH=/usr/java/j2sdk1.4.2_01/lib<br /> /opt/eclipse/eclipse -vm /usr/java/j2sdk1.4.2_01/bin/java -data ~/workspace &<br /> # -vm 参数用以指定使用哪一?jvm 来执行EclipseQ?br /> # -date参数用以指定Eclipse的数据目录。在此指定其存在用户根目?~)下的workspace目录?br /> <br /> <br /> <br /> eclipse.sh 复制?usr/local/bin中,qؓ(f)它加上权?55Q现在执?eclipse.sh 卛_启动 Eclipse?<br /> <br /> [root@redarmy] cp eclipse.sh /usr/local/bin<br /> [root@redarmy] chmod 755 /usr/local/bin/eclipse.sh<br /> <br /> <br /> <br /> eclipsed到桌面。首先,在桌面上按下鼠标右键Q在弹出菜单中选择“新增启动”Q之后分別在“名称”中输入Eclipse?#8220;命o(h)”中填 /usr/local/bin/eclipse.shQ然后再为它随便找个喜欢的图标(我用的是/opt/eclipse/icon.xpmQ?再后?“定”Q桌面上有eclipse的快h式了(jin)Q以后可以直接双击这个图标启动Eclipse?<br /> <br /> Eclipse 安装好后Q已l内Z(jin)java开发环境(JDTQ就可以直接开发Java E序?<br /> <br /> 4.安装cdtQCDT 1.1 GA 目前只支持Eclipse 2.1 版?<br /> <br /> 下载的包解压,?x)得到features 和plugins q两个目?<br /> <br /> [root@redarmy] unzip –d /opt org.eclipse.cdt-linux.gtk_1.1.0.bin.dist.zip <br /> <br /> 分别这两个目录中的所有文件分别剪?opt/eclipse下的对应目录里,卛_。(Eclipse 的插件安裝方法几乎都q样安装Q?把文件下载后Q?直接解到eclipse所安装的目录中对应的features 和plugins 中即可。)(j) <br /> <br /> 三:(x)?<br /> <br /> 要是不习(fn)惯,eclipse英文环境Q可以在eclipse.org的主站上下,它的语言包;装了(jin)语言包后Q不光菜单成中文?jin),它的帮助文档也成中文了(jin),爽吧^_^ </span></span></div> <!-- 正文end --><br /> <span style="color: #000000"><span style="color: #003366">(http://www.fanqiang.com)<br /> </span></span></font></font></td> </tr> </tbody> </table> <img src ="http://www.tkk7.com/joan/aggbug/232598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/joan/" target="_blank">joan</a> 2008-10-06 09:44 <a href="http://www.tkk7.com/joan/articles/232598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://z88d.com" target="_blank">91Ʒһ鶹 </a>| <a href="http://wangquanai.com" target="_blank">AV뼤Ƭ</a>| <a href="http://j2eesp.com" target="_blank">ˬƵ</a>| <a href="http://bomilon.com" target="_blank">þþƷ</a>| <a href="http://jinmenonline.com" target="_blank">ֻѵAVߵӰ</a>| <a href="http://taoduoduo666.com" target="_blank">youjizz</a>| <a href="http://kj555888.com" target="_blank">޾Ʒվ߲</a>| <a href="http://xx9911.com" target="_blank">޾Ʒ뾫ƷmV߹ۿ</a>| <a href="http://wenfaka.com" target="_blank">Ļ߹ۿ</a>| <a href="http://nonobo.com" target="_blank">ŮվѸƵ</a>| <a href="http://lanchenews.com" target="_blank">8888ɫ߹ۿѿ</a>| <a href="http://m0808dy.com" target="_blank">Ļavר</a>| <a href="http://adcaes.com" target="_blank">Ƶվѹۿ</a>| <a href="http://wwwzs88.com" target="_blank">AVһ </a>| <a href="http://dwj28.com" target="_blank">ӽ18վ</a>| <a href="http://zjpcyh.com" target="_blank">aѹۿվ</a>| <a href="http://wwwpaogou123.com" target="_blank">պƵ߹ۿ</a>| <a href="http://blbkl.com" target="_blank">ɫַ߹ۿ</a>| <a href="http://www-ttyx.com" target="_blank">һҹƵ</a>| <a href="http://25gh.com" target="_blank">ǴýƵѹۿ</a>| <a href="http://www-006688.com" target="_blank">ŷ޹SUV</a>| <a href="http://7766ks.com" target="_blank">avav߲</a>| <a href="http://shaonvfushi.com" target="_blank">ۺavһ</a>| <a href="http://317777aa.com" target="_blank">Ѷ</a>| <a href="http://66qiqi.com" target="_blank">ŷղҳ</a>| <a href="http://0917xzb.com" target="_blank">պAvҹҹˬ</a>| <a href="http://jiggybaby.com" target="_blank">AVһDV</a>| <a href="http://wwwwmmmm.com" target="_blank">ƷۺϾþĻ</a>| <a href="http://100357.com" target="_blank">۵Ӱ߹ۿ</a>| <a href="http://888xxss.com" target="_blank">Ůһ</a>| <a href="http://www-2236444.com" target="_blank">һ͵Ů</a>| <a href="http://zzdyzj.com" target="_blank">av2019</a>| <a href="http://gycat.com" target="_blank">һۿ</a>| <a href="http://myzhoubian.com" target="_blank">Ʒާv벥</a>| <a href="http://2002tw.com" target="_blank">AV˾Ʒ߹ۿ </a>| <a href="http://zjjtejia.com" target="_blank">޶Ʒav</a>| <a href="http://gz-shunan.com" target="_blank">޾ƷþþþþҲ </a>| <a href="http://www96pg.com" target="_blank">һƷ˾þ</a>| <a href="http://bisi666.com" target="_blank">ۺϾƷ㽶þ</a>| <a href="http://jastrelax.com" target="_blank">鶹ۺ뾫Ʒ</a>| <a href="http://cc58866.com" target="_blank">һ߹ۿƷ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>