比XML更好用的Java-Annotation课件_第1页
比XML更好用的Java-Annotation课件_第2页
比XML更好用的Java-Annotation课件_第3页
比XML更好用的Java-Annotation课件_第4页
比XML更好用的Java-Annotation课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaTWO

專業技術大會

JavaAnnotation

李日貴(jini)AboutMejini@JWorld.TW(jakarta99)SoftLeaderTech.Corp.Presidentsince2002FocusondevinJavaenterprise

applicationsforInsurances,BankingandBetting.ResearchingandSharingJavaOpensourcesMyGoogle+(http://gplus.to/jakarta99)SinglenowAgendaIntroductionServlet3.0EJB3.1WebServicesCDIOpensourcesJavassist/ASM@Annotation

Course1

Introduction

What’sannotationBeginwith“@”AnInterfaceSetValues@Annotation@Annotation(“someValue”)@Annotation(var1=“someA”,var2=“someB”)@Annotation(value={“Apple”,“Banana”,“Cherry”})RetentionPolicy@AnnotationRuntimeDefaultvalueStereotypeFindtheclassescontain@AnnotationInitializethemaswhatyouwantTogeneratethecodesorxmlandetc..@Target(ElementType)@AnnoTarget(TYPE)publicclassTheTarget{ @AnnoTarget(FIELD)

privateStringglobalMsg; @AnnoTarget(CONSTRUCTOR)

publicTheTarget(){

//Thisisaconstructor

}

@AnnoTarget(METHOD)

publicvoidsomeMethod(@AnnoTarget(PARAMETER)

StringmyParam){ //Thisisamethod }}@Annotation

Course2

Servlet3.0

Servlet2.5packagejavatwo.annotation;publicclassCatServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{

//dosomething }}web.xml<web-app> <servlet> <servlet-name>CatServlet</servlet-name> <servlet-class>javatwo.annotation.CatServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CatServlet</servlet-name> <url-pattern>/cat</url-pattern> </servlet-mapping></web-app>Servlet3.0packagejavatwo.annotation;@WebServlet(“/cat”)publicclassCatServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

//dosomething }}@WebServlet(name="catServlet",urlPatterns="/cat",

initParams={@WebInitParam(name="name",value="bobo")})Servlet3.0Noweb.xmlneeded@WebServlet -DefineaServlet@WebFilter

-DefineaFilter@WebListener -DefineaListener@WebInitParam -Defineinitparameter@MultipartConfig-DefineuploadpropertiesCanuseweb.xmltooverridevaluesthatspecifiedbytheAnnotations.FileUploadinServlet3.0@WebServlet(“/upload”)@MultipartConfig(location=“c:\\tmp”)publicclassFileUploadServletextendsHttpServlet{ publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ Collection<Part>parts=request.getParts(); for(Partpart:parts){

part.write(“upload.txt”);//savetoc:\tmp\upload.txt }}setAsyncinServlet3.0@WebServlet(name=“AsyncServlet”,urlPatterns=“/async”,asyncSupported=“true”)publicclassAsyncServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse){

AsyncContext

aCtx=request.startAsync(request,response);

ServletContextsc=request.getServletContext(); ((Queue<AsyncContext>)sc.getAttribute(“slowQueue")).add(aCtx); }}@WebListenerpublicclassSlowQueueListenerimplementsServletContextListener{ publicvoidcontextInitialized(ServletContextEvent

sce){…}}@Annotation

Course3

EJB3.1

EJB2.xpublicinterfaceCalculatorLocalextendsEJBLocalObject{..}publicinterfaceCalculatorLocalHomeextendsEJBLocalHome{..}publicclassCalculatorBeanimplementsSessionBean{..}ejb-jar.xml<ejb-jar> <enterprise-beans> <session> <ejb-name>calculator</ejb-name> <local-home>CalculatorLocalHome</local-home> <local>CalculatorLocal</local> <ejb-class>CalculatorBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans></ejb-jar>EJB3.0@LocalpublicinterfaceCalculatorLocal

extendsEJBLocalObject

{..}publicinterfaceCalculatorHomeextendsEJBHome{..}@StatelesspublicclassCalculatorBeanimplementsCalculatorLocal{..}ejb-jar.xmlEJB3.1(LocalBean)@LocalpublicinterfaceCalculatorLocalextendsEJBLocalObject{..}publicinterfaceCalculatorHomeextendsEJBHome{..}@StatelesspublicclassCalculatorBean

implementsCalculatorLocal{..}ejb-jar.xmlSingletonSessionBean@Singleton@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)publicclassSingletonBean{ privateint

clickCount=0;

@Lock(LockType.WRITE) publicint

getClickCount(){ returnclickCount++; }}//Thread-Safe,TransactionalScheduleTimer@SingletonpublicclassTransFileBean{

@Schedule(minute=“0”,hour=“4”,dayOfMonth=“Last”) publicvoidtrans(){ //dotransfer }}@Annotation

Course4

WebServicesWebServices“Big”WebServicesSOAPJAX-WSjavax.jws.*RESTful

WebServicesRESTJAX-RSjavax.ws.rs.*SOAPWebServiceimportjavax.jws.WebMethod;importjavax.jws.WebService;@WebService(serviceName=“helloService”)publicclassHello{

@WebMethod publicStringsayHello(Stringname){ return“Hello“+name; }}RESTful

WebServiceimportjavax.ws.rs.GET;importjavax.ws.rs.Path;importjavax.ws.rs.PathParam;importjavax.ws.rs.Produces;importjavax.ws.rs.core.MediaType;@Path("/helloREST/{name}")publicclassHelloREST{

@GET @Produces(MediaType.TEXT_PLAIN) publicStringgetHello(@PathParam("name")Stringname){ return"Hello*"+name+"*fromJAX-RS"; } }@Annotation

Course5

CDIResourceInjectionJEE5@WebServlet(“/product”)publicProductServletextendsHttpServlet{

@Inject privateProductBean

productBean; ..}@StatelesspublicclassProductBean{ ..}AmbiguousInject@Qualifierpublic@interfaceCarPolicyNo{}@Qualifierpublic@interfaceFirePolicyNo{}@CarPolicyNoGeneratorpublicclassCarPolicyNoGeneratorimplementsPolicyNoGenerator{..}@FirePolicyNoGeneratorpublicclassFirePolicyNoGeneratorimplementsPolicyNoGenerator{..}publicclassFireService{

@Inject @FirePolicyNoGenerator privatePolicyNoGenerator

policyNoGenerator;}@ProducespublicclassDatabaseProducer{

@Produces@PersistenceContext(unitName=“ds1”)

@FireDatabase privateEntityManager

em;}publicclassFireService{

@Inject

@FireDatabase privateEntityManager

em;}@Annotation

Course6

OpensourcesjUnit3.ximportjunit.framework.Assert;importjunit.framework.TestCase;publicclassCalculateServiceTest3extendsTestCase{ publicvoidsetUp()throwsException{} publicvoidtestSum(){

intactual=newCalculateService().sum(3,5);

Assert.assertEquals(8,actual); } publicvoidtearDown()throwsException{}}jUnit4.xpublicclassCalculateServiceTest4extendsTestCase{ @BeforeClass publicstaticvoidsetUpBeforeClass()throwsException{}

@Before publicvoidbeforeTest()throwsException{}

@Test publicvoidtheSum(){ Assert.assertEquals(8,newCalculateService().sum(3,5)); }

@After publicvoidafterTest()throwsException{}

@AfterClass publicstaticvoidtearDownAfterClass()throwsException{}}Spring2.5<beans> <beanid=“newsDao”class=“javatwo.annotation.spring.NewsDao”/> <beanid=“newsService”class=“javatwo.annotation.spring.NewsService”> <propertyname=“newsDao”> <refbean=“newsDao”/> </property> </bean></beans>@ServicepublicclassNewsService{

@Autowired privateNewsDao

newsDao;}

Spring3.0@NamedpublicclassNewsService{

@Inject privateNewsDao

newsDao;}Spring3.0@ConfigurationpublicclassAppConfig{ private@Value(“#{sysprop.dbURL}”)StringdbURL; private@Value(“#{sysprop.username}”)Stringusername; private@Value(“#{sysprop.password}”)Stringpassword;

@Bean publicDataSource

dataSource(){ returnnewDriverManagerDataSource(dbURL,username,password); }}MVCinSpring3.0@Controller@RequestMapping(“/news”)publicclassNewsController{

@RequestMaaping(value=“{id}”, method=RequestMethod.GET)

publicModelAndView

getById(@PathVariable(“id”)Longid){ return… }}@Annotation

Course7

Javassist/ASMReflectionClassmyClass=MyClass.class;Method[]myMethods=myClass.getMethods();for(Method

myMethod:myMethods){

Annotation[]annotations=myMethod.getAnnotations(); for(Annotation

annotation:annotations){ if(annotationinstanceof

MyAnno){

MyAnno

myAnno=(MyAnno)annotation; //dosomething } }}ScaninClassLoaderproject(basedonjavassist)URL[]urls=ClasspathUrlFinder.findClassPaths();AnnotationDBdb=newAnnotationDB();db.scanArchives(urls);Map<String,Set<String>>annoIndex=db.getAnnotationIndex();Set<String>aClassNames=annoIndex.get(“java

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论