NutzCN Logo
问答 一个自己封装实现ServerFace的注入疑问
发布于 152天前 作者 文涛(wentao) 215 次浏览 复制 上一个帖子 下一个帖子
标签:

自己封装了一个redis注入类,正常注入没有问题,但是如果注入变量名写错了就出现了一个奇怪问题,具体情况如下:
封装的redis类代码:

@IocBean
public class RedisStarter implements ServerFace {

    @Inject
    protected PropertiesProxy conf;

    @Inject("refer:$ioc")
    protected Ioc ioc;

    // @IocBean(name = "redis")
    public void init() {
        // 扫描所有redisName
        String regex = "redis\\.(\\w*)\\.host";
        for (String key : conf.getKeys()) {
            Pattern pattern = Regex.getPattern(regex);
            Matcher match = pattern.matcher(key);
            if (match.find()) {
                // 获取redisName
                String redisName = match.group(1);
                if(!redisName.equals("local")) { // local会在最后默认处理
                    Redis redis = new Redis(redisName, conf);
                    ioc.addBean(redisName + "Redis", redis);
                }
            }
        }
        // return new Redis("local", conf); // 注入默认redis,如果没有配置local,但用户使用了默认redis,则会抛出异常 throw Lang.makeThrow("未连接到Redis,请检查配置项");
    }

    @Override
    public void start() throws Exception {
        init();
    }
}

配置文件如下:

redis.ad.host=127.0.0.1:6379
redis.ad.password=
redis.ad.pool.max.total=50
redis.ad.pool.max.idle=5
redis.ad.pool.max.wait.millis=100000
redis.ad.pool.test.on.borrow=true

redis.aaa.host=127.0.0.1:6380
redis.aaa.password=
redis.aaa.pool.max.total=50
redis.aaa.pool.max.idle=5
redis.aaa.pool.max.wait.millis=100000
redis.aaa.pool.test.on.borrow=true

正确注入代码:

    @Inject
    Redis aaaRedis;

    @Inject
    Redis adRedis;

错误注入代码:

    @Inject
    Redis redisAAA;

    @Inject
    Redis redisAd;

我的疑问是,我使用错误注入代码竟然不报错,而且还能正常操作redis,不正常的是,redisAAA和redisAd都是访问的redis.ad.host这个redis,不知道这是个什么原理

6 回复

是否引用了starter-redis,有默认配置,你自定义别用redis.前缀,并删除starter-redis

我还真是引用了redis-starter了的

只是搞不懂为什么注入变量随便写也可以注入成功

@Inject如果不写名字, 那么就是属性名优先, 然后找类型

好吧,看来以后要规范Inject把name=这个加上

我试验下Inject的name写错看看会不会注入失败

添加回复
请先登陆
回到顶部