WhiteDG / mybatis-crypto

🔐 A mybatis-based crypto plugin
Apache License 2.0
72 stars 20 forks source link

是不是没办法使用在spring容器内的IEncryptor? #5

Open xxyz30 opened 1 year ago

xxyz30 commented 1 year ago

我自定义了个Encryptor,且使用了Spring容器的注入

@Component
public class Encryptor implements IEncryptor {

    @Autowired
    private PooledPBEStringEncryptor encryptor;

    @Autowired
    private IUserLogService userLogService;

    @Override
    public String encrypt(Object o, String s) throws Exception {
        userLogService.save(new UserLog());
        return encryptor.encrypt(o.toString());
    }

    @Override
    public String decrypt(Object o, String s) throws Exception {
        userLogService.save(new UserLog());
        return encryptor.decrypt(o.toString());
    }
}

然后就会空指针,因为这里 图片

直接使用了newInstance(),所以不在spring管理里。 是不是把这个defaultEncryptor字段的类型直接改成IEncryptor会比较好? 图片

WhiteDG commented 1 year ago

抱歉,回复迟了。 因为 mybatis-crypto-core 核心实现是不依赖 spring 的,所以才用反射方式创建实例。

xxyz30 commented 1 year ago

抱歉,回复迟了。 因为 mybatis-crypto-core 核心实现是不依赖 spring 的,所以才用反射方式创建实例。

那把这个图二的defaultEncryptor的类型定义成IEncryptor就行了,不要Class<? extends IEncryptor> 然后可以让用户配置自己的实例,就解决了(

xxyz30 commented 1 year ago

而且也可以解决掉构造函数有多个的问题(