@Configuration、@Bean 用法说明
@Configuration 注解:
- 作用域为类,专门用于配置构造、初始化、组件组装。
@Bean 注解:
- 只能在 @Configuration 类里使用,且只能加在函数上
- 且,只支持注在 public 函数上
- 只是把对象注册到容器(对象身上有什么注解,不会做处理;也不会自动加代理)
- 可以返回 void 或 null
它们主要有三种使用场景:
1、 初始化配置模型
@Inject("${liteflow}") //@Inject 作用在类上,只与 @Configuration 配合才有效
@Configuration
public class LiteflowProperty {
private boolean enable;
private String ruleSource;
private String ruleSourceExtData;
...
}
2、 构建或组装对象进入容器
尽量以参数形式注入,可形成依赖约束。可以返回 null,复杂的条件可以在函数内处理。
@Configuration
public class DemoConfig {
@Bean(value = "db1", typed = true)
public DataSource db1(@Inject("${demo.db1}") HikariDataSource ds){
return ds;
}
//可以返回 void
@Bean
public void db1_cfg(@Db("db1") MybatisConfiguration cfg) {
MybatisPlusInterceptor plusInterceptor = new MybatisPlusInterceptor();
plusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
cfg.setCacheEnabled(false);
cfg.addInterceptor(plusInterceptor);
}
//也可以带条件处理(可以返回 null)
@Bean
public CacheService cache(@Inject("${cache.enable}") boolean enable,
@Inject("${cache.config}") CacheServiceSupplier supper){
if(enable){
return supper.get();
}else{
return null;
}
}
}
3、 初始化一些设置
@Configuration
public class Config {
@Bean
public AuthAdapter adapter() {
return new AuthAdapter()
.loginUrl("/login") //设定登录地址,未登录时自动跳转
.addRule(r -> r.include("**").verifyIp().failure((c, t) -> c.output("你的IP不在白名单"))) //添加规则
.addRule(b -> b.exclude("/login**").exclude("/_run/**").verifyPath()) //添加规则
.processor(new AuthProcessorImpl()) //设定认证处理器
.failure((ctx, rst) -> {
ctx.render(rst); //设定默认的验证失败处理;也可以用过滤器捕促异常
});
}
}