Obtain real Class object for Spring bean











up vote
18
down vote

favorite
6












I am using Spring to inject beans. And I am using some annotations to annotate bean methods (Security, TransactionManagement, ExceptionHanling, Logging). The problem is:




I want to create JUnit test to check if I forgot annotate some methods. But Spring returns $ProxyXXX class without any annotations on methods..



Method methods = logic.getClass().getMethods();

for (Method method : methods) {
Annotation annotations = method.getAnnotations(); // empty array!


How can I get annotations for method or obtain a real class object?



P.S. Spring 2.5.6, JDKDynamicProxy (not CGLib)










share|improve this question
























  • Analogous question for Seam stackoverflow.com/questions/1979717/…
    – dart
    Feb 18 '10 at 15:00















up vote
18
down vote

favorite
6












I am using Spring to inject beans. And I am using some annotations to annotate bean methods (Security, TransactionManagement, ExceptionHanling, Logging). The problem is:




I want to create JUnit test to check if I forgot annotate some methods. But Spring returns $ProxyXXX class without any annotations on methods..



Method methods = logic.getClass().getMethods();

for (Method method : methods) {
Annotation annotations = method.getAnnotations(); // empty array!


How can I get annotations for method or obtain a real class object?



P.S. Spring 2.5.6, JDKDynamicProxy (not CGLib)










share|improve this question
























  • Analogous question for Seam stackoverflow.com/questions/1979717/…
    – dart
    Feb 18 '10 at 15:00













up vote
18
down vote

favorite
6









up vote
18
down vote

favorite
6






6





I am using Spring to inject beans. And I am using some annotations to annotate bean methods (Security, TransactionManagement, ExceptionHanling, Logging). The problem is:




I want to create JUnit test to check if I forgot annotate some methods. But Spring returns $ProxyXXX class without any annotations on methods..



Method methods = logic.getClass().getMethods();

for (Method method : methods) {
Annotation annotations = method.getAnnotations(); // empty array!


How can I get annotations for method or obtain a real class object?



P.S. Spring 2.5.6, JDKDynamicProxy (not CGLib)










share|improve this question















I am using Spring to inject beans. And I am using some annotations to annotate bean methods (Security, TransactionManagement, ExceptionHanling, Logging). The problem is:




I want to create JUnit test to check if I forgot annotate some methods. But Spring returns $ProxyXXX class without any annotations on methods..



Method methods = logic.getClass().getMethods();

for (Method method : methods) {
Annotation annotations = method.getAnnotations(); // empty array!


How can I get annotations for method or obtain a real class object?



P.S. Spring 2.5.6, JDKDynamicProxy (not CGLib)







java spring spring-aop






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Feb 18 '10 at 19:56









skaffman

336k85729720




336k85729720










asked Feb 18 '10 at 14:20









dart

72031124




72031124












  • Analogous question for Seam stackoverflow.com/questions/1979717/…
    – dart
    Feb 18 '10 at 15:00


















  • Analogous question for Seam stackoverflow.com/questions/1979717/…
    – dart
    Feb 18 '10 at 15:00
















Analogous question for Seam stackoverflow.com/questions/1979717/…
– dart
Feb 18 '10 at 15:00




Analogous question for Seam stackoverflow.com/questions/1979717/…
– dart
Feb 18 '10 at 15:00












3 Answers
3






active

oldest

votes

















up vote
26
down vote



accepted










Spring's interface-based proxies implement TargetClassAware.






share|improve this answer























  • Nice! Sorry for outdated comment, I used AopUtils.getTargetClass(Object) from "see also" section in the provided link.
    – iozee
    Sep 29 '16 at 9:45


















up vote
17
down vote













You can cast the proxied object to get the object and class it acts as a proxy for (see TargetSource):



Advised advised = (Advised) proxy;
Class<?> cls = advised.getTargetSource().getTargetClass();


Generally you should follow the Spring principles and keep obtaining the correct class as unobtrusive as possible. Meaning that as little classes as possible should depend on the Spring Framework APIs (maybe add a ClassLocator and a SpringProxyClassLocator implementation).






share|improve this answer






























    up vote
    12
    down vote













    Or you can just call: AopUtils.html#getTargetClass(java.lang.Object)






    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














       

      draft saved


      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f2289211%2fobtain-real-class-object-for-spring-bean%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes








      up vote
      26
      down vote



      accepted










      Spring's interface-based proxies implement TargetClassAware.






      share|improve this answer























      • Nice! Sorry for outdated comment, I used AopUtils.getTargetClass(Object) from "see also" section in the provided link.
        – iozee
        Sep 29 '16 at 9:45















      up vote
      26
      down vote



      accepted










      Spring's interface-based proxies implement TargetClassAware.






      share|improve this answer























      • Nice! Sorry for outdated comment, I used AopUtils.getTargetClass(Object) from "see also" section in the provided link.
        – iozee
        Sep 29 '16 at 9:45













      up vote
      26
      down vote



      accepted







      up vote
      26
      down vote



      accepted






      Spring's interface-based proxies implement TargetClassAware.






      share|improve this answer














      Spring's interface-based proxies implement TargetClassAware.







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Feb 18 '10 at 19:52

























      answered Feb 18 '10 at 14:42









      axtavt

      203k32434435




      203k32434435












      • Nice! Sorry for outdated comment, I used AopUtils.getTargetClass(Object) from "see also" section in the provided link.
        – iozee
        Sep 29 '16 at 9:45


















      • Nice! Sorry for outdated comment, I used AopUtils.getTargetClass(Object) from "see also" section in the provided link.
        – iozee
        Sep 29 '16 at 9:45
















      Nice! Sorry for outdated comment, I used AopUtils.getTargetClass(Object) from "see also" section in the provided link.
      – iozee
      Sep 29 '16 at 9:45




      Nice! Sorry for outdated comment, I used AopUtils.getTargetClass(Object) from "see also" section in the provided link.
      – iozee
      Sep 29 '16 at 9:45












      up vote
      17
      down vote













      You can cast the proxied object to get the object and class it acts as a proxy for (see TargetSource):



      Advised advised = (Advised) proxy;
      Class<?> cls = advised.getTargetSource().getTargetClass();


      Generally you should follow the Spring principles and keep obtaining the correct class as unobtrusive as possible. Meaning that as little classes as possible should depend on the Spring Framework APIs (maybe add a ClassLocator and a SpringProxyClassLocator implementation).






      share|improve this answer



























        up vote
        17
        down vote













        You can cast the proxied object to get the object and class it acts as a proxy for (see TargetSource):



        Advised advised = (Advised) proxy;
        Class<?> cls = advised.getTargetSource().getTargetClass();


        Generally you should follow the Spring principles and keep obtaining the correct class as unobtrusive as possible. Meaning that as little classes as possible should depend on the Spring Framework APIs (maybe add a ClassLocator and a SpringProxyClassLocator implementation).






        share|improve this answer

























          up vote
          17
          down vote










          up vote
          17
          down vote









          You can cast the proxied object to get the object and class it acts as a proxy for (see TargetSource):



          Advised advised = (Advised) proxy;
          Class<?> cls = advised.getTargetSource().getTargetClass();


          Generally you should follow the Spring principles and keep obtaining the correct class as unobtrusive as possible. Meaning that as little classes as possible should depend on the Spring Framework APIs (maybe add a ClassLocator and a SpringProxyClassLocator implementation).






          share|improve this answer














          You can cast the proxied object to get the object and class it acts as a proxy for (see TargetSource):



          Advised advised = (Advised) proxy;
          Class<?> cls = advised.getTargetSource().getTargetClass();


          Generally you should follow the Spring principles and keep obtaining the correct class as unobtrusive as possible. Meaning that as little classes as possible should depend on the Spring Framework APIs (maybe add a ClassLocator and a SpringProxyClassLocator implementation).







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Feb 18 '10 at 14:53

























          answered Feb 18 '10 at 14:41









          Daff

          35.8k783102




          35.8k783102






















              up vote
              12
              down vote













              Or you can just call: AopUtils.html#getTargetClass(java.lang.Object)






              share|improve this answer

























                up vote
                12
                down vote













                Or you can just call: AopUtils.html#getTargetClass(java.lang.Object)






                share|improve this answer























                  up vote
                  12
                  down vote










                  up vote
                  12
                  down vote









                  Or you can just call: AopUtils.html#getTargetClass(java.lang.Object)






                  share|improve this answer












                  Or you can just call: AopUtils.html#getTargetClass(java.lang.Object)







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Jul 23 '15 at 19:06









                  Korobko Alex

                  457159




                  457159






























                       

                      draft saved


                      draft discarded



















































                       


                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f2289211%2fobtain-real-class-object-for-spring-bean%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      How to change which sound is reproduced for terminal bell?

                      Can I use Tabulator js library in my java Spring + Thymeleaf project?

                      Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents