`
zy19982004
  • 浏览: 654425 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:249911
社区版块
存档分类
最新评论

Java注解学习三:package-info.java的使用

 
阅读更多

一.引入 

     上文http://zy19982004.iteye.com/blog/1979208中,提到了注解类JyzTargetPackage可以定义为@Target(ElementType.PACKAGE),可是在被注解类里我无论怎么加,编译器都报错,于是引入了package-info.java这个文件。

 

二.创建package-info.java

  1. "I found that when you create a new package in eclispe there is a check box to check if you want a package-info.java."勾上就行了。
  2. 如果不幸的是你已经创建了这个包并在里面定义了很多类,而eclispe又是不能直接创建一个package-info.java文件的。只能在包对应文件夹里,手动创建一个package-info.java,写上包名,最后刷新eclispe即可。

 

三.package-info.java的作用

 

  1. "Package annotations must be in file package-info.java",package-info.java为我们提供了包注解的地方。JyzTargetPackage(http://zy19982004.iteye.com/blog/1979208)苦苦寻找终于找到地方了。
  2. 提供包级别的类(或接口),这些类(或接口)只有本包里才能访问,即使是子包也不能访问。
  3. 提供包的整体注释说明。

 package-info.java

/**  
 * <b>package-info不是平常类,其作用有三个:</b><br>  
 * 1、为标注在包上Annotation提供便利;<br>  
 * 2、声明包的私有类和常量;<br>  
 * 3、提供包的整体注释说明。<br>  
 * 
 * @author JoyoungZhang@gmail.com 
*/ 
@JyzTargetPackage(version="1.0")
package com.jyz.study.jdk.annotation;

class PackageInfo{
	public void common(){
		System.out.println("sa");
	}
}

class PackageInfoGeneric<T extends Throwable>{
	private T obj;
	public void set(T obj){
		this.obj = obj;
	}
	public void common(){
		System.out.println(obj + "sa");
	}
}

interface packageInfoInteger{
	public void test();
}

class PackageConstants{
	public static final String ERROE_CODE = "100001";   
}

 

 

TestPackageInfo.java

package com.jyz.study.jdk.annotation;

import java.io.IOException;

/**
 * 测试package-info.java文件的作用
 * 1、为标注在包上Annotation提供便利;<br>  
 * 2、声明包的私有类和常量;<br>  
 * @author JoyoungZhang@gmail.com
 *
 */
public class TestPackageInfo {

	public static void main(String[] args) {
		//1
		Package p = Package.getPackage("com.jyz.study.jdk.annotation");
	    if(p != null && p.isAnnotationPresent(JyzTargetPackage.class)){
	    	JyzTargetPackage nav = p.getAnnotation(JyzTargetPackage.class);
	    	if(nav != null){ 
	    		System.out.println("package version:" + nav.version());
	    	}
	    }
	    
	    //2
		PackageInfo packageInfo = new PackageInfo();
		packageInfo.common();
		
		//泛型也能很好的工作,在pakcage-info.java里定义的类和普通类没什么区别
		PackageInfoGeneric<Exception> packageInfoGeneric = new PackageInfoGeneric<Exception>();
		packageInfoGeneric.set(new IOException("device io"));
		packageInfoGeneric.common();
		
		
		Sub sub = new Sub();
		sub.test();
		
		System.out.println(PackageConstants.ERROE_CODE);
	}
}

class Sub implements packageInfoInteger{
	
	@Override
	public void test() {
		System.out.println("sub");
	}
	
}


console output:
package version:1.0
sa
java.io.IOException: device iosa
sub
100001

 

  需要注意两点

  1. package-info.java里不能声明public class(或 interface)
  2. 刚开始p.isAnnotationPresent(JyzTargetPackage.class)返回false,后来找到原因JyzTargetPackage没有加上@Retention(RetentionPolicy.RUNTIME)。

 

1
0
分享到:
评论

相关推荐

    springweb3.0MVC注解(附实例)

    -- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 --&gt; &lt;bean class="org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter"/&gt; &lt;!-- ③:对模型视图名称的解析,即在模型...

    java高并发秒杀系统.rar

    在java包下面的seckill包下,创建controller,service,pojo,mapper包,在service包下创建impl包 在resource包下创建mapper包,放置mapper文件 其中templates包下放置前端页面 4.测试 ①在启动类中添加注解:@...

    SpringMVC-SSH全注解

    注解配置 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 配置形式: org.springframework.orm.hibernate3.LocalSessionFactoryBean --&gt; ...

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

    springmvcwendang

    学一下基本的配置流程 1.配置web.xml的servlet 匹配/WEB-INF/&lt;servlet-name&gt;-servlet.xml (会找到这样的一个文件) ...注意:看一个项目(java web项目)究竟用了什么框架、 那么就要看web.xml的配置

    spring3.2+strut2+hibernate4

    --将action内容放在package元素下,package元素的name值与extends值可以使用默认值,如下所示 --&gt; &lt;package name="abstract_struts" abstract="true" extends="struts-default" namespace="/"&gt; &lt;interceptors&gt; ...

    Spring boot 示例 官方 Demo

    spring-boot-package-war:spring-boot打包成war包示例 spring-boot-shiro:springboot 整合shiro rbac示例 spring-boot-file-upload:使用Spring Boot 上传文件示例 spring-boot-fastDFS:Spring Boot 整合FastDFS...

    mybatis 注解别名找不到

    Cause: java.lang.ClassNotFoundException: Cannot find class: student 当你使用mybatis注解别名找不到文件时,在你的mybatis配置文件中加入 &lt;package name="com.oyk.pojo"/&gt; 注意标签一定要放在标签下面

    LocalDateTimeUtil.java

    package com.aapoint.util; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; public class LocalDateTimeUtil { /** * 比较 ...

    用注解编写创建表的SQL语句

    建议提前读一下think in java 注解 。  说明创建注解我在第一个注解说明下,以后的注解不在说明。‘  DBTable 注解:  /** * Project Name:myannotation * File Name:DBTable.java * Package Name:...

    day021-反射和注解笔记和代码.rar

    5. PACKAGE:可以在包上使用注解 6. PARAMETER:可以在参数列表上使用注解 7. TYPE:可以在类、接口(包括注解类型) 或enum上使用注解 例如:@Target(ElementType.METHOD)//...

    POI 封装操作Excel(导入、导出)

    本例采用javabean + 注解的方式,对POI进行了封装,旨在针对不同的Excel文档用同样的方法处理,已到达代码的重复利用。该jar包包含导入 Import 和导出 Export Excel两部分。 (一)导入: /** * 描述: Excel 导入...

    客户关系管理系统框架搭建(二)

    public class SysUserGroup implements java.io.Serializable { private Integer id; private String remark; // 备注 private String name; // 部门名称 private String principal; // 部门负责...

    java-style-guide:我们在White Cloak中使用的Java样式指南

    语言指南摘自以下内容:目录枚举类间距缩进线长垂直间距吸气剂和二传手支撑样式切换语句注解测验测试班测试方法语 命名总体而言,命名应遵循Java标准。 配套程序包名称均为小写字母,多个单词连接在一起,没有连...

    liferay-spring-mvc-portlet:Liferay Spring MVC portlet 的项目模板

    Java 1.7 小门户 2.0 弹簧框架 4.1.5 基于注解的控制器配置 用法 $ git clone http://github.com/psvehla/liferay-spring-mvc-portlet.git $ cd liferay-spring-mvc-portlet $ mvn package 部署 如果您使用 ...

    Guns系统技术文档及视频

    │ │ │ ├─common----------------项目公用的部分(业务中经常调用的类,例如常量,异常,实体,注解,分页类,节点类) │ │ │ │ │ │ │ ├─config----------------项目配置代码(例如mybtais-plus配置,ehcache配置...

    pkg-scanner:Java包扫描器, 扫描出指定包下所有的类名

    Package Scanner - The missing scanner in Java world 扫描出指定包下所有的类名。 Quick Start 指定包名: PkgScanner scanner = new PkgScanner("cn.fh.pkgscanner"); List&lt;String&gt; list = scanner.scan(); ...

    mybatis-comment-generator:自定义 Mybatis Generator 注释生成器,默认使用数据库注释作为生成 Java 注释,并支持附加注解

    mybatis-comment-generator简介这是用于 中生成注释这一步骤的自定义生成器,默认将数据库注释作为 Java 注释,并支持在生成的 Java 代码中附加注解示例&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;!DOCTYPE ...

    cms后台管理

    Jeecms是基于Spring注解,在自定义标签时对于实体类和dao service等注意注解的问题。 五 自定义标签及使用自己创建的表的实现过程 下面是我自己定义的标签mycontent_list 首先,在数据库里创建了一个jc_...

Global site tag (gtag.js) - Google Analytics