Spring Boot自定义注释不起作用

时间:2019-05-08 02:21:39

标签: java spring annotations

springboot注释存在一个奇怪的问题。我创建的3个文件如下。

1.@Interface file1

package com.UserOp.Controller.annotation;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface helloX {
    String value() default "Hello Aop.";
}


2.@Aspect file2
package com.UserOp.Controller.annotation;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class helloXAspect {
    @Pointcut("@annotation(com.UserOp.Controller.annotation.helloX)")
    private void cut() { }  
    @Around("cut()")
    public void advice(ProceedingJoinPoint joinPoint){
        System.out.println("Around begin.");
        try {
            joinPoint.proceed();
        } catch (Throwable e) {
            e.printStackTrace();
        }
        System.out.println("Around end.");
    }
}


3.test class file3
package com.UserOp.Controller.annotation;
import org.springframework.stereotype.Service;
@Service
public class ABC {
    @helloX
    public void test()
    {
        System.out.println("int hellox test.");
    }
}




4.//spring boot run file4,
package com.UserOp.Controller.useropControllers;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.ResponseBody;
import com.UserOp.Controller.annotation.ABC;
import com.UserOp.Controller.annotation.helloX;
import com.UserOp.DbModel.Users.Cloud_UsersRepository;
import MyJ_CommonLib.MyJ_ReqResult;
import annotation.MyResponseBody;

@Component
public class userController {
    @Autowired
    ABC abc;
    public String UserOp(HttpSession session, HttpServletRequest request, Object object) {
        test();
        return "";
    }
    //@helloX
    void test()
    {
        System.out.println("prepar test!");
        abc.test();
        return;
    }
}




   //The above file is invoked as follows

    package com.UserOp.Controller;
    ....
    @RestController
    public class DoController {
        @Autowired
        userController a_userController;
    ...
        @RequestMapping(value="/Do",method=RequestMethod.GET)
        public String doRoute(@RequestParam String mode,@RequestParam String action
                ,@RequestParam(required=false) String process,HttpSession session,HttpServletRequest request) throws Exception
           {
              a_userController.UserOp(session,request,null);
              return "";
           }
    ...


Please see the  file4,There are two things going on here.

//first,all be right.annotation '@helloX' excute on abc.test();
    void test()
    {
        System.out.println("prepar test!");
        abc.test();
        return;
    }




//but this is error.
            @helloX   //look there,add this notation than nothing happened.
            void test()
            {
                System.out.println("prepar test!");
                //abc.test();
                return;
            }

我不知道为什么将@helloX添加到file3可以正常工作(abc.test(),但是将@helloX添加到file4则不起作用。并且在调试模式下报告错误:

        Unable to install breakpoint in com.UserOp.Controller.useropControllers
        .userController$$FastClassBySpringCGLIB$$3389c207 
        due to missing line number attributes. 
        Modify compiler options to generate line number attributes.

        Reason:
        Absent Line Number Information

0 个答案:

没有答案