首先基础要理解spring配置文件和springmvc配置文件
spring注解不生效可从以下几个方面找原因
1 springmvc的配置文件中只配置扫描@Controller的注解,spring的配置文件扫描除了@Controller的注解的其他的注解
2 检查@Pointcut 的表达式是否正确
3 如果在service层aop 可以生效,controller层不生效,把 <aop:aspectj-autoproxy proxy-target-class="true"/>添加到到springmvc的配置文件中
附上aop 注解代码
@Component
@Aspect
public class LoginAspect {
private Logger logger=LoggerFactory.getLogger(LoginAspect.class);
public LoginAspect(){
}
@Pointcut("execution(* com.zyc.service..*.*(..))")
public void point(){}
@Pointcut("execution(* com.zyc.controller.*.*(..))")
public void pointcontroller(){}
/**
* 配置环绕通知
* @param joinPoint
* @return
* @throws Throwable
*/
@Around("pointcontroller()")
public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable{
logger.debug("进入aoparound方法");
if(checkPass(joinPoint.getSignature().getName())){
return joinPoint.proceed();
}
HttpServletRequest request=getHttpServletRequest();
String account=request.getParameter("account");
logger.debug(account);
return joinPoint.proceed();
}
/**
* 检查是否需要验证登录
* @param method
* @return
*/
private boolean checkPass(String method){
switch(method){
case "login":
return true;
case "register":
return true;
}
return false;
}
/**
* 获取request
* @return
*/
protected HttpServletRequest getHttpServletRequest(){
return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
}
}
springmvc配置文件中主要配置
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!-- 扫描controller, 如果全部扫描所有注解可能会导致springmvc映射不管用或者事物失效-->
<context:component-scan base-package="com.zyc.controller"
use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
spring配置文件中主要配置
<!-- 不扫描controller注解,不然会导致事物失效 -->
<context:component-scan base-package="com.zyc">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
在以上配置中
proxy-target-class="true" 属于动态代理的方式选择,有兴趣的朋友可以看看其他资料