@Inject 用法说明
属性 | 说明 |
---|---|
value | |
required | 必需的(配置注入时有效) //v1.10.7 开始启用 |
autoRefreshed | 自动刷新(配置注入时有效,且单例才有自动刷新的必要) |
1、注入Bean
注入Bean时,仅能用到 value 属性
根据类型注入 bean
@Service
public class UserService{
}
@Controller
public class Demo{
@Inject
UserService userService;
}
根据名字注入 bean
@Component("userService")
public class UserService{
}
@Controller
public class Demo{
@Inject("userService")
UserService userService;
}
2、注入配置
配置注入时,没有找到相应的属性时会报异常(可通过 required = false 关掉),如果后期会动态修改属性且需要自动刷新时(可通过 autoRefreshed = true 开启)。主要配置格式有:
${xxx}
注入属性${xxx:def}
注入属性,如果没有提供 def 默认值${classpath:xxx.yml}
注入资源目录下的配置文件 xxx.xml
为字段注入
@Component
public class Demo{
@Inject(value = "${user.name}", autoRefreshed=true) //可以注入单个值,顺带演示自动刷新(非单例,不要启用)
String userName;
@Inject("${user.config}") //可以注入结构体
UserConfig userConfig;
}
为结构体注入。仅对 @Configuration 注解的类有效
@Inject("${user.config}")
@Configuration
public class UserConfig{
...
}
为参数注入。仅对 @Bean 注解的函数有效
@Configuration
public class Config{
@Bean
public UserConfig config(@Inject("${user.config}") UserConfig uc){
return uc;
}
}
3、提示:不支持构造函数注入与属性设置注入
- 不支持的:
@Component
public class Demo{
private A a;
private B b;
public Demo(@Inject A a){
this.a = a;
}
public void setB(@Inject B b){
this.b = b;
}
}
- 支持的:
@Component
public class Demo{
@Inject
private A a;
@Inject
private B b;
//@Init
//public void initDo(){
// //Solon 的注入是异步的。想要对注入的 bean 进行实始化,需要借用 @Init 函数
//}
}