Spring Boot 가 shiro 를 통합 한 후 @ Transactional 등 주석 이 실 효 된 문제 및 해결

2017 단어 IT
Spring Boot 가 shiro 를 통합 한 후 @ Transactional 등 주석 이 실 효 된 문제 및 해결
부분 전재:https://blog.csdn.net/gnail_oug/article/details/80706205
문제 설명
  • Springboot 가 shiro 를 통합 하기 전에 service 의 @ Cacheable, @ Transactional 등 주 해 는 모두 정상적으로 사용 되 었 습 니 다.
  • shiro 를 통합 한 후 UserRealm 류 에 자동 으로 주입 되 는 service 의 주해 가 실 효 됩 니 다 (Shiro 의 초기 화 bean 은 Spring bean 의 초기 화 에 영향 을 주 고 일부 bean 의 업무 가 실 효 될 것 이 라 고 초보 적 으로 판단 합 니 다)
  • UserRealm 코드 는 다음 과 같 습 니 다.
    public class UserRealm extends AuthorizingRealm {
        private static final Logger LOGGER = LoggerFactory.getLogger(UserRealm.class);
        /**
         *      SysUserService   、       
         */
        @Autowired
        private SysUserService sysUserService;
    
        //      
    }
    

    SysUserService 코드 는 다음 과 같 습 니 다.
    @Service
    public class SysUserService {
        @Autowired
        private SysUserMapper userMapper;
    
        @Cacheable(cacheNames = "users", key = "'sysuser:'+#userName")
        public SysUser findByUserName(String userName) {
            return userMapper.findByUserName(userName);
        }
    }
    

    해결 방법
    UserRealm 에서 service 를 자동 으로 주입 할 때 @ Lazy 주석 지연 주입 을 추가 합 니 다. 다음 과 같 습 니 다.
    public class UserRealm extends AuthorizingRealm {
        private static final Logger LOGGER = LoggerFactory.getLogger(UserRealm.class);
        /**
         *   @Lazy      
         */
        @Autowired
        @Lazy
        private SysUserService sysUserService;
    
        /**
         *   @Lazy      
         */
        @Autowired
        @Lazy
        private SysPermissionService sysPermissionService;
    
        //      
    }
    

    해결 방법
    orm 맵 프레임 워 크 의 Mapper 류 는 Spring 생 성 초기 화 가 아니 라 Spring 관리 에 만 맡 기 고 Spring bean 초기 화 에 영향 을 주지 않 습 니 다.
    public class UserRealm extends AuthorizingRealm {
        private static final Logger LOGGER = LoggerFactory.getLogger(UserRealm.class);
        @Autowired
        private SysUserMapper sysUserMapper;
        
        @Autowired
        private SysPermissionMapper sysPermissionMapper;
    
        //      
    }
    

    좋은 웹페이지 즐겨찾기