Làm cách nào để thay đổi phương thức đang thực hiện trong Java?Sửa đổi một phương thức bằng cách sử dụng Chú thích
Ý tôi là, tôi đang cố gắng sử dụng các chú thích để làm cho đoạn mã sau
@Anno1(Argument = "Option1")
public class TestClass
{
@Anno2
public void test()
{
}
}
Into
public class TestClass
{
private static StaticReference z;
public void test()
{
z.invokeToAll();
}
}
Đây là một ví dụ rất đơn giản về những gì tôi đang cố gắng làm. Anno1
sẽ có nhiều kết hợp có thể, nhưng đây không phải là vấn đề của tôi cho đến nay. Vấn đề của tôi là cách thêm mã vào phương thức test()
Tôi đang tìm giải pháp chung chung hơn nếu có thể. Ví dụ. Một cách để thêm tất cả các loại mã trong phương pháp này (không chỉ là một cách để .invokeToAll()
)
Cho đến nay tôi đang sử dụng import javax.annotation.processing.*;
và tôi có đoạn mã sau, nhưng tôi không biết làm thế nào để đi vào từ đó
private void processMethodAnnotations(RoundEnvironment env)
{
for (Element e : env.getElementsAnnotatedWith(Anno2.class))
{
//If it is a valid annotation over a method
if (e.getKind() == ElementKind.METHOD)
{
//What to do here :S
}else
{
processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING,"Not a method!", e);
}
}
}
Tôi đã tìm thấy một cái gì đó về Java Reflection nhưng tôi đã không tìm thấy bất kỳ nguồn nào để giúp tôi với những gì tôi đang làm.
Rõ ràng là tôi extends AbstractProcessor
trong mã của tôi
Tôi đã tìm thấy hướng dẫn này (http://www.zdnetasia.com/writing-and-processing-custom-annotations-part-3-39362483.htm) Nhưng điều này các mối quan tâm tạo ra một lớp mới, không chỉ thay đổi một phương thức. và javax.lang.model.elements
không cung cấp bất kỳ cách nào để chỉnh sửa phần tử đó (trong trường hợp của tôi là một Phương thức).
Tôi hy vọng câu hỏi của tôi rõ ràng và phù hợp với các quy tắc. Nếu không xin vui lòng bình luận và tôi sẽ làm rõ. Cảm ơn.
Giải pháp của bạn có vẻ là những gì tôi muốn, không may vì lý do lạ tôi không thể sử dụng nó. Tôi đã tìm thấy một giải pháp ở nơi khác ('Javassist'). Dù sao tôi đã cho bạn +1 và bây giờ là một câu trả lời được chấp nhận cho những nỗ lực và câu trả lời tốt. Cảm ơn rất nhiều! – Muggen
@Muggen hm, bạn có thể cho tôi biết về "lý do kỳ lạ", vì vậy tôi có thể thấy chúng có thực sự quan trọng hay không; có thể có một cách khác để gắn bó với AOP (có vẻ dễ dàng hơn để hỗ trợ ..) – Maxym
những lý do kỳ lạ là 'Hạn chế học thuật';). Cám ơn sự giúp đở cuả bạn. – Muggen