如何在带注释的方法上检索注释的值?
我有:
@myAnnotation(attribute1 = value1, attibute2 = value2)
public void myMethod()
{
//I want to get value1 here
}
Run Code Online (Sandbox Code Playgroud) 我理解类注释的目的,这要归功于Java中使用的注释的方式和位置?.如本博客文章和Java语言规范的§7.4.1所述,包注释的目的是什么?
为什么要将元数据与包关联?你能做什么?
@uncheckedVariance 可以用来弥合Scala的声明站点方差注释和Java的不变泛型之间的差距.
scala> import java.util.Comparator
import java.util.Comparator
scala> trait Foo[T] extends Comparator[T]
defined trait Foo
scala> trait Foo[-T] extends Comparator[T]
<console>:5: error: contravariant type T occurs in invariant position in type [-T]java.lang.Object with java.util.Comparator[T] of trait Foo
trait Foo[-T] extends Comparator[T]
^
scala> import annotation.unchecked._
import annotation.unchecked._
scala> trait Foo[-T] extends Comparator[T @uncheckedVariance]
defined trait Foo
Run Code Online (Sandbox Code Playgroud)
这表示java.util.Comparator自然是反变体,即类型参数T出现在参数中,而不是返回类型.
这就引出了一个问题:为什么它还在Scala集合库中使用,它不是从Java接口扩展的?
trait GenericTraversableTemplate[+A, +CC[X] <: Traversable[X]] extends HasNewBuilder[A, CC[A] @uncheckedVariance]
Run Code Online (Sandbox Code Playgroud)
此注释的有效用途是什么?
如何在括号内没有属性名称的自定义java注释?
我不希望这样:@annotation_name(att=valor).我只想在Servlets中,即:
@WebServlet("/main")
Run Code Online (Sandbox Code Playgroud) 大约一年后,我读了一篇文章,解释了如何创建一个基本上是其他注释容器的注释.这样,如果我总是在特定用例中使用相同的5个注释,我会创建一个包含它们的注释并使用它.
不幸的是,我再也找不到这篇文章,而且我现在真的想为我的杰克逊配置做这件事.
由于我自己找不到任何相关信息,我开始质疑我的记忆.这可能还是我错了?
编辑
我想要的是:
@Target(ElementType.METHOD)
@com.fasterxml.jackson.databind.annotation.JsonSerialize(using=MySerializerThatIsUsedEverywhere.class
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(MyCustomXmlAdapter.class)
@SomeOtherEvaluatedByTheSerializer
public @interface SerializerUseCase01 {
public String a();
public int b();
)
Run Code Online (Sandbox Code Playgroud)
我的情况是我有一堆序列化用例,可以由具有不同配置的相同序列化程序处理.为了使一切更容易使用和更透明,我想将jackson配置和序列化器配置包装成一个注释.
有没有办法表明我的Spring Web MVC控制器方法应该通过作为URI路径的一部分传递ID的请求来匹配...
@RequestMapping(method=RequestMethod.GET, value="campaigns/{id}")
public String getCampaignDetails(Model model, @PathVariable("id") Long id) {
Run Code Online (Sandbox Code Playgroud)
...或者如果客户端将ID作为样式中的HTTP请求参数发送...
@RequestMapping(method=RequestMethod.GET, value="campaigns")
public String getCampaignDetails(Model model, @RequestParam("id") Long id) {
Run Code Online (Sandbox Code Playgroud)
在我看来,这是一个非常常见的真实URL方案,我不想添加重复的代码,但我还没有找到答案.任何建议都非常欢迎.
编辑:事实证明,目前似乎(使用Spring MVC <= 3.0)没有办法实现这一点,请参阅Javi答案中的讨论.
我@Override在Eclipse中有一个令人讨厌的注释问题.通常,当我在新PC上导入工作项目时,Eclipse会将某些@Override注释标记为错误.如果我删除注释一切都很好,Eclipse也表示方法覆盖了父方法,但添加覆盖注释会再次导致错误.我目前正在开发一个Android项目,所以它可能是Android的问题,而不是Eclipse.
我有一个groovy课程,我想在一个属性值自动装配.
例如:
public @Value("${valueA}" ) String valueA;
Run Code Online (Sandbox Code Playgroud)
在我的应用程序上下文中添加了property-placeholder
<context:property-placeholder location="classpath:spring/app.properties" />
Run Code Online (Sandbox Code Playgroud)
app.properties具有为"valueA"设置的值,因此理论上这应该在运行时填充我的类中的String valueA.
如果我使用java类,这个设置工作正常,但如果我使用groovy类则不行.
我收到编译错误:
错误:预期'$ valueA'是@ org.springframework.beans.factory.annotation.Value中java.lang.String类型的内联常量
错误:属性'value'的类型应为'java.lang.String'; 但在@ org.springframework.beans.factory.annotation.Value中找到了'java.lang.Object'类型
我只是想知道在使用groovy类时上述语法是否正确,如果不是,那么在运行时自动装配@Value参数的正确语法是什么.
假设我有这个注释类
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodXY {
public int x();
public int y();
}
public class AnnotationTest {
@MethodXY(x=5, y=5)
public void myMethodA(){ ... }
@MethodXY(x=3, y=2)
public void myMethodB(){ ... }
}
Run Code Online (Sandbox Code Playgroud)
那么有没有办法查看一个对象,使用@MethodXY注释"寻找"该方法,其中元素x = 3,y = 2,并调用它?
谢谢
我想创建自己的自定义注释.我的框架是Stand alone java应用程序.当有人注释他的pojo类时,后面的"隐藏"代码将触发方法.
例如,今天在Java EE中我们有@MessageDriven注释.当您使用@MessageDrivenMessageListener接口并使用MessageListener接口注释您的类时,会触发一个后面的代码onMessage(Message msg).当消息从队列/主题到达时.
如何创建@MyMessageDriven可以添加到pojo并实现的注释()MyCustomMessageListener.
我想要的结果是触发"隐藏"代码(我的),它将触发一个实现接口的方法(就像我在下面写的样本一样).
annotations ×10
java ×7
spring ×2
android ×1
attributes ×1
default ×1
eclipse ×1
groovy ×1
interface ×1
jackson ×1
overriding ×1
parentheses ×1
properties ×1
reflection ×1
scala ×1
scala-2.8 ×1
spring-mvc ×1
unchecked ×1
variance ×1