一.引入
上文http://zy19982004.iteye.com/blog/1979208中,提到了注解类JyzTargetPackage可以定义为@Target(ElementType.PACKAGE),可是在被注解类里我无论怎么加,编译器都报错,于是引入了package-info.java这个文件。
二.创建package-info.java
- "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."勾上就行了。
- 如果不幸的是你已经创建了这个包并在里面定义了很多类,而eclispe又是不能直接创建一个package-info.java文件的。只能在包对应文件夹里,手动创建一个package-info.java,写上包名,最后刷新eclispe即可。
三.package-info.java的作用
- "Package annotations must be in file package-info.java",package-info.java为我们提供了包注解的地方。JyzTargetPackage(http://zy19982004.iteye.com/blog/1979208)苦苦寻找终于找到地方了。
- 提供包级别的类(或接口),这些类(或接口)只有本包里才能访问,即使是子包也不能访问。
- 提供包的整体注释说明。
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
需要注意两点
- package-info.java里不能声明public class(或 interface)
- 刚开始p.isAnnotationPresent(JyzTargetPackage.class)返回false,后来找到原因JyzTargetPackage没有加上@Retention(RetentionPolicy.RUNTIME)。
相关推荐
-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter"/> <!-- ③:对模型视图名称的解析,即在模型...
在java包下面的seckill包下,创建controller,service,pojo,mapper包,在service包下创建impl包 在resource包下创建mapper包,放置mapper文件 其中templates包下放置前端页面 4.测试 ①在启动类中添加注解:@...
注解配置 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 配置形式: org.springframework.orm.hibernate3.LocalSessionFactoryBean --> ...
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
学一下基本的配置流程 1.配置web.xml的servlet 匹配/WEB-INF/<servlet-name>-servlet.xml (会找到这样的一个文件) ...注意:看一个项目(java web项目)究竟用了什么框架、 那么就要看web.xml的配置
--将action内容放在package元素下,package元素的name值与extends值可以使用默认值,如下所示 --> <package name="abstract_struts" abstract="true" extends="struts-default" namespace="/"> <interceptors> ...
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...
Cause: java.lang.ClassNotFoundException: Cannot find class: student 当你使用mybatis注解别名找不到文件时,在你的mybatis配置文件中加入 <package name="com.oyk.pojo"/> 注意标签一定要放在标签下面
package com.aapoint.util; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; public class LocalDateTimeUtil { /** * 比较 ...
建议提前读一下think in java 注解 。 说明创建注解我在第一个注解说明下,以后的注解不在说明。‘ DBTable 注解: /** * Project Name:myannotation * File Name:DBTable.java * Package Name:...
5. PACKAGE:可以在包上使用注解 6. PARAMETER:可以在参数列表上使用注解 7. TYPE:可以在类、接口(包括注解类型) 或enum上使用注解 例如:@Target(ElementType.METHOD)//...
本例采用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标准。 配套程序包名称均为小写字母,多个单词连接在一起,没有连...
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 部署 如果您使用 ...
│ │ │ ├─common----------------项目公用的部分(业务中经常调用的类,例如常量,异常,实体,注解,分页类,节点类) │ │ │ │ │ │ │ ├─config----------------项目配置代码(例如mybtais-plus配置,ehcache配置...
Package Scanner - The missing scanner in Java world 扫描出指定包下所有的类名。 Quick Start 指定包名: PkgScanner scanner = new PkgScanner("cn.fh.pkgscanner"); List<String> list = scanner.scan(); ...
mybatis-comment-generator简介这是用于 中生成注释这一步骤的自定义生成器,默认将数据库注释作为 Java 注释,并支持在生成的 Java 代码中附加注解示例<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ...
Jeecms是基于Spring注解,在自定义标签时对于实体类和dao service等注意注解的问题。 五 自定义标签及使用自己创建的表的实现过程 下面是我自己定义的标签mycontent_list 首先,在数据库里创建了一个jc_...