指尖世界

分享的乐趣

spring拦截器不生效

类别: 观点 更新时间: 2017-09-14

在平时休闲时间做一个学习型项目练手,在练习过程中,遇到一个spring拦截器不生效的问题,拦截器代码如下:

 

@Aspect
// 该注解标示该类为切面类
@Component
public class LogAopAction {
	
	@Autowired
	private LogDao logDao;

	@Around("execution(* com.lanyuan.service.impl.*.* (..))")
	public Object logAll(ProceedingJoinPoint point) {
        }
}

   被拦截对象如下:

 

@Transactional
@Service("storeService")
public class StoreServiceImpl implements StoreService {
    
    @Autowired
    private StoreDao storeDao;
    
 
    @Override
    public void add(Store store) {
   }
}

 但是如果直接调用是拦截不到的,因为采用了@Autowired注解,这个会自动装配javabean,

所以在没有生成代理类之前,就已经进行了装配,所以注入的实例为非代理类,所以无法拦截。

 

解决方案:

storeService = (StoreService) SpringContextUtil.getBean("storeService");

采用spring手动方式获取实例,在需要的时候获取代理类。

 

还有一种是使用延迟加载方式,这个需要用到lazy注解,大家可以查查网上资料。