Tag: 注释

在java项目中添加/修改注释

我们有一个Java代码库,我们打算在项目中使用它们。 其中一些项目需要在此库中的Java对象中添加注释(即在一个项目中,这些对象将在JAX-RS servlet实现中使用,因此需要使用JAXB,JSON等注释进行注释)。 我遇到的问题是我无法弄清楚如何在不更改原始库的情况下添加这些注释。 考虑这个例子: public class MyClass { private String field1; private int field2; } 在某些项目中,我希望课程表现得像是 public class MyClass { @Annotation1 private String field1; @Annotation2 private int field2; } 最初我想过使用单独注释的接口或派生类但无法弄清楚如何做(或者是否可能)。 我还发现了这个线程中的Javassist建议(即Java字节码操作方法),但问题是这需要在Android客户端上工作,所以它不适合我。 在这一点上,我没有想法。 如果有人能以任何方式提供帮助,我将不胜感激。 也许我错过了一些东西,或者我想要做的不是正确的方法。 无论如何,我现在需要一些指导才能继续。 首先十分感谢。

Getter和@Nonnull

我从eclipse得到一个警告,我知道我可以通过抑制警告删除它,但我更愿意理解是什么原因导致它可能为空。 package-info.java @ParametersAreNonnullByDefault package test; import javax.annotation.ParametersAreNonnullByDefault; test.java package test; public class Test { public static void main( final String[ ] args ) { System.out.println( new Test( “a” ).getS( ) ); } private final String s; public Test( final String s ) { this.s = s; } public String getS( ) { return this.s;//Null type […]

使用Java 6注释处理器获取generics类型的限定类名

我正在使用JDK 6的Annotation Processing API开发一个小代码生成器,并试图获得类中字段的实际generics类型。 为了更清楚,让我说我有这样一个类: @MyAnnotation public class User { private String id; private String username; private String password; private Set roles = new HashSet(); private UserProfile profile; } 这是我的注释处理器类: @SupportedAnnotationTypes({ “xxx.MyAnnotation” }) @SupportedSourceVersion(SourceVersion.RELEASE_6) public class MongoDocumentAnnotationProcessor extends AbstractProcessor { private Types typeUtils = null; private Elements elementUtils = null; @Override public synchronized void init(ProcessingEnvironment […]

Spring引导在Java注释上外部化配置属性/消息

有没有办法在spring从外部属性文件中读取文本而不使用@Value注释。 例如:application.properties var.foo=”hello” 我可以用弹簧豆注入它 @Value(“${var.foo}”) String value; 作为类变量。 有没有办法在不使用@Value注释的情况下包含此属性。 类似于JSR beanvalidation的方式。 @NotNull(message={custom.notnull}) 并在ValidationMessages.properties文件中外部化此属性值。 例如,如果我有一个资源(Web组件)类,并且如果我必须使用Swagger注释来记录它们, @controller @path(“/”) @Api(description = “User Resource API”) public class UserResource { @Path(“/users”) @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = “returns user details”, notes = “some notes”) public User getUser() { return new User(123, “Joe”, “Montana”); } } 和模型, @ApiModel(“user model”) public class User { […]

如何使用给定的注释运行所有方法?

这就是我想要发生的事情: public class MainClass { public static void main(String args[]) { run @mod(); // run all methods annotated with @mod annotation } } 注释声明: @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface mod { String name() default “”; } 要调用的方法 : public class Good { @mod (name = “me1”) public void calledcs(){ System.out.println(“called”); } @mod (name = “me2”) public […]

@initbinder不适用于特定的模型属性

我正在使用@valid和@initbinder来validation传递给服务的数据,但我面临的问题是@InitBinder仅在全球范围内工作,即 @InitBinder // possible to leave off for global behavior protected void initBinder(WebDataBinder binder){ binder.setValidator(new LoginRequestValidator()); } 而不是像我有一个名为LoginRequest的模型对象的特定模型属性: @InitBinder(“LoginRequest”) // possible to leave off for global behavior protected void initBinder(WebDataBinder binder){ binder.setValidator(new LoginRequestValidator()); } 在这种情况下,validation器根本没有被调用..这是正确的方法吗? 还是我错过了什么?

注释来源保留政策

来自Java doc: CLASS:注释将由编译器记录在类文件中,但在运行时不需要由VM保留。 RUNTIME:注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以reflection性地读取它们。 SOURCE:编译器将丢弃注释。 我理解RUNTIME的用法(为了使用带有reflection的注释)和CLASS(用于编译器),但是我不明白它什么时候可以使用 @Retention(RetentionPolicy.SOURCE) 你可以解释吗?

请参阅调用方法的java注释

假设我有这样的情况: public String method(String s) { return stringForThisVisibility(s, EnumVisibility.PUBLIC); } 我想用这样的注释替换它: @VisibilityLevel(value = EnumVisibility.PUBLIC) public String method(String s) { return stringForThisVisibility(s); } 这似乎是一个更好,更清晰的解决方案,但我需要stringForThisVisibility方法来通过某种reflection来了解@VisibilityLevel的值。 那可能吗? 我可以在调用stringForThisVisibility的方法上看到注释吗?

理解java中的’TypeElement’和’DeclaredType’接口

这两个接口的一个用途,就是编写注释处理器。 作为一个java初学者,我找到了这两个包添加的间接层: javax.lang.model.element和javax.lang.model.type以提供有关java interface和java class混淆的元数据。 ……… java doc评论说, TypeElement表示class或interface程序元素。 提供对类型及其成员的信息的访问。 请注意, enum类型是一种类,注释类型是一种interface 。 DeclaredType表示声明的类型,类型类型或interface类型。 这包括参数化类型,例如java.util.Set以及原始类型。 两者的区别: TypeElement表示class或interface 元素 ,而DeclaredType表示class或interface 类型 ,后者是前者的使用(或调用 )。 如何区分行话元素与类型 ? 例如: class 元素与class 类型有何不同? 请帮我举个例子。

使用AspectJ将一个注释转换为多个注释

我在我的JPA映射中发现了一种我希望编写的模式。 一个简单的例子如下: @OneToMany(fetch=FetchType.EAGER) @Sort(type=SortType.NATURAL) private SortedSet items; 我想创建一个名为SortedOneToMany的注释,我可以应用于上面的集合: public @interface SortedOneToMany { FetchType fetch() default EAGER; SortType sort() default NATURAL; Class comparator() default void.class; } 我写了以下方面,以便在看到我的注释时“附加”JPA注释: public aspect SortedOneToManyAspect { declare @field: @SortedOneToMany * * : @OneToMany(fetch=FetchType.EAGER); declare @field: @SortedOneToMany * * : @Sort(type=SortType.NATURAL); } 但我不知道如何访问SortedOneToMany注释参数的值,并在定义OneToMany和Sort注释时使用它们。 在某些情况下,我可能会更改其中一个默认值,如下所示: @SortedOneToMany(sort=SortType.COMPARATOR,comparator=ItemComparator.class) private SortedSet items; 那么如何将SortedOneToMany中的注释值传递给Sort注释呢?