Tag: 注释

@Override这样的注释如何在Java内部工作?

任何人都可以向我解释注释如何在java内部工作? 我知道如何通过在java中使用java.lang.annotation库来创建自定义注释。 但我仍然没有得到它在内部的工作方式,例如@Override注释。 如果有人能详细解释,我将非常感激。

通过Spring Framework中的注释从resourceBundle获取本地化消息

是否有可能做到这一点 ? 目前这样做是这样的: content.Language @Autowired protected MessageSource resource; protected String getMessage(String code, Object[] object, Locale locale) { return resource.getMessage(code, object, locale); } 有没有办法让它像通过@Value注释获取属性一样? @Value(“#{generals[‘supported.lang.codes’]}”) public String langCodes; 因为必须调用该方法通常很好,但是例如在unit testing时,这很痛苦……在某些情况下,webdriver的PageObject模式对象没有初始化,这将是非常有帮助的

插入Java编译器

我有一个后编译步骤来操作生成的类的Java字节码。 我想让图书馆消费者尽可能轻松地生活,所以我正在研究如何使这个过程自动化,并且(如果可能的话)编译器不可知。 Annotation Processing API提供了许多所需的function(自动服务发现; Eclipse支持)。 不幸的是,这是针对代码生成器, 并不支持操作现有的文物 : 该工具的初始输入被认为是由第0轮创建的; 因此,尝试创建与其中一个输入相对应的源文件或类文件将导致FilerException。 API推荐的Decorator模式不是一个选项。 我可以看到如何使用运行时代理/检测执行该步骤,但这是一个比手动构建步骤更糟糕的选择,因为它需要任何人甚至可以通过API外围触摸来以非显而易见的方式配置其JVM。 有没有办法插入或包装javac调用的编译器工具 ? 有没有人成功地颠覆了注释处理器来操纵字节码,无论文档说什么?

如果Annotation是一个接口,那么它如何扩展Object类?

我们将注释定义为接口,如下所示 @interface annot_name { } 我们知道所有注释都默认扩展接口java.lang.annotation.Annotation 。 当我检查Java库中的Annotation接口时,我发现它覆盖了很多Object类的方法,比如hashCode()等。 如果Annotation是一个接口,那么它如何扩展Object类并覆盖其方法? 接口只能扩展其他接口而不能扩展类。

Java:无法通过reflection访问注释

这是一个测试类: import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class TestAnnotations { @interface Annotate{} @Annotate public void myMethod(){} public static void main(String[] args) { try{ Method[] methods = TestAnnotations.class.getDeclaredMethods(); Method m = methods[1]; assert m.getName().equals(“myMethod”); System.out.println(“method inspected ? ” + m.getName()); Annotation a = m.getAnnotation(Annotate.class); System.out.println(“annotation ? ” + a); System.out.println(“annotations length ? ” + m.getDeclaredAnnotations().length); } catch(Exception […]

是否可以将JPA注释添加到超类实例变量中?

我正在为两个不同的表创建相同的实体。 为了使两个实体的表映射等不同,但只将其余的代码放在一个地方 – 一个抽象的超类。 最好的方法是能够在超类中注释诸如列名之类的通用内容(因为它们将是相同的),但这不起作用,因为JPA注释不是由子类inheritance的。 这是一个例子: public abstract class MyAbstractEntity { @Column(name=”PROPERTY”) //This will not be inherited and is therefore useless here protected String property; public String getProperty() { return this.property; } //setters, hashCode, equals etc. methods } 我想inheritance并仅指定特定于子项的内容,例如注释: @Entity @Table(name=”MY_ENTITY_TABLE”) public class MyEntity extends MyAbstractEntity { //This will not work since this field does […]

如何在使用Java Web Services时访问HttpServletRequest对象

我正在使用Java 6,Tomcat 6和Metro。 我使用WebService和WebMethod注释来公开我的Web服务。 我想获得有关请求的信息。 我尝试了以下代码,但wsCtxt始终为null。 我必须采取什么步骤才能为WebServiceContext获取null。 换句话说:如何执行以下行来获取wsCtxt的非null值? MessageContext msgCtxt = wsCtxt.getMessageContext(); @WebService public class MyService{ @Resource WebServiceContext wsCtxt; @WebMethod public void myWebMethod(){ MessageContext msgCtxt = wsCtxt.getMessageContext(); HttpServletRequest req = (HttpServletRequest)msgCtxt.get(MessageContext.SERVLET_REQUEST); String clientIP = req.getRemoteAddr(); }

具有注释参数的切入点匹配方法

在以下情况下,我需要使用与方法匹配的切入点创建方面: 它是用MyAnnotationForMethod注释的 其中一个参数(可以有很多)用@MyAnnotationForParam注释(但也可以有其他注释)。 方面类看起来像这样 @Pointcut(“execution(@MyAnnotationForMethod * *(..,@aspects.MyAnnotationForParam Object, ..)) && args(obj)”) void myPointcut(JoinPoint thisJoinPoint, Object obj) { } @Before(“myPointcut(thisJoinPoint , obj)”) public void doStuffOnParam(JoinPoint thisJoinPoint, Object obj) { LOGGER.info(“doStuffOnParam :”+obj); } 注释方法 @MyAnnotationForMethod public string theMethod(String a, @MyAnnotationForParam @OtherAnnotation Object obj, Object b){ LOGGER.info(a+obj+b); } 随着eclipse – >警告:关于poincut: Multiple markers at this line – no […]

Java Annotations – 寻找RetentionPolicy.CLASS的示例

根据Java Annotation API: RetentionPolicy.CLASS注释将由编译器记录在类文件中,但在运行时不需要由VM保留。 RetentionPolicy.RUNTIME注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以reflection性地读取它们。 我正在寻找“CLASS”保留政策的样本。 当我们需要使用此策略而不是RUNTIME策略时。

如何编写Java注释处理器?

我可能只是在寻找错误的方向,但我发现注释处理的JSE文档非常稀疏。 我想编写一个注释处理器,它处理带注释的String字段和局部变量,用计算的String表达式替换它们。 这不应该太复杂,但我在Javadoc for javax.annotation.processing中迷失了。 编辑:我需要在编译时处理注释,因为我想修改生成的代码。 它应该用计算的String表达式替换带注释的常量String表达式。