首先要确认：

* 是托管对象（有没有被扫描到？）
* 还是自己 new 的？（这个是无法注入！）
* 如果是参数注入？如果参数名变成 "arg0" 了，参考：[编译保持参数名不变-parameters？](/article/260)

### 1、如果是应用属性相关的

要找一下，有没有相关的配置？

此例，当没有 `xxx.yyy` 配置时会出错：

```java
import org.noear.solon.annotation.Inject;

@Inject("${xxx.yyy}")
String yyy;
```


### 2、如果是托管 Bean 相关的

正常的推理：



|   思考顺序     | 推理 | 处理建议 |
| ---- | -------- | -------- |
| 1      | 注入失败？     |      |
| 2     | 说明（容器）没有相关 Bean 注册     |      |
| 3     | Bean 是通过配置的？还是扫描的？     |      |
| 4     | 如果是通过配置的？                                | 可能是缺少配置？或配置错了？ |
| 5     | 如果没有扫描到？为什么会没扫到？           | 检查下扫描范围     |


参考资料：《Bean 容器的扫描方式与范围》

* https://solon.noear.org/article/34

示例1：会出错（bbb 包的 App 启动时，不会扫描 aaa 包下的类）：

```java
import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Inject;

//---

package demo.aaa;
@Component
public class UserService {}

//---

package demo.bbb;
@Controller
public class UserController {
    @Inject
    UserService userService;
}

package demo.bbb;
public class App { //把 App 移到 demo 下，就不会出错（可同时扫描 aaa, bbb 等下级包）
    public static void main(String[] args) {
        Solon.start(App.class, args);
    }
}
```

示例2：会出错（配置对应的表达式下没有需要的 Mapper）

```yaml
solon.dataSources:
  db1!:
    class: "com.zaxxer.hikari.HikariDataSource"
    jdbcUrl: jdbc:mysql://localhost:3306/rock?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
    driverClassName: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
  
mybatis.db1:
    mappers:       
        - "demo.bbb.mapper.*"
```

```java
package demo.aaa.mapper;

public class UserMapper {}

//---

package demo.bbb.mapper;

public class DemoMapper {}

//---

package demo.bbb.service;

@Component
public class UserService {
    @Inject
    UserMapper userMapper;
}
```