spring boot底层注解

spring boot底层注解



Configuration和Bean

Configuration用于标注类,表示当前类为配置类,常与Bean配合使用,配置类本身也是组件,会被扫描到容器里。

Bean用于标注方法,表示该方法用于向容器中添加组件,以方法名作为组件id,返回的对象就是组件实例,他们的基本用法如下

@Configuration// 表示当前类为配置类
public class MyConfig {

    @Bean// 用于向容器中添加组件,以方法名作为组件id,返回的对象就是组件实例
    public MyUtils myUtils(){
        return new MyUtils("aaa");
    }

}

Configuration有一个很重要的属性叫proxyBeanMethods,该属性表示是否代理Bean方法(即@Bean所注解的方法),默认为ture,此时我们通过配置类再去调用Bean方法时,不会再去new一个对象,而是返回容器中的Bean对象,这种模式称为配置的Full模式。

与之相对的,当proxyBeanMethods = false时,称为Lite模式,此时我们只要调用Bean方法,就会返回一个新对象。

Full模式用于解决组件依赖的问题,当不存在组件依赖时,可以使用Lite模式。组件依赖案例如下:

@Configuration(proxyBeanMethods = true)// 表示当前类为配置类,会自动将该
public class MyConfig {

    @Bean// 用于向容器中添加组件,以方法名作为组件id,返回的对象就是组件实例
    public MyUtils myUtils(){
        return new MyUtils("aaa", user());
    }

    @Bean// 用于向容器中添加组件,以方法名作为组件id,返回的对象就是组件实例
    public User user(){
        return new User("001");
    }
}
public class MyUtils {

    private String name;
    private User user;

    public MyUtils(String name, User user) {
        this.name = name;
        this.user = user;
    }
}

MyUtils需要依赖另一个组件User时,使用Full模式可以保证MyUtils依赖的User与容器中的相同。


Import

Import用于标注类,且该类必须是组件,可以批量导入组件,导入组件的id为全类名,用法如下:

@Import({MyUtils.class, User.class})// 注解的类只要是组件就行,不需要是配置类
@Configuration
public class MyConfig {}

Conditional

条件装配,它是一个根注解,当满足某种条件时导入组件,他的子注解用于标注类或Bean方法。例如ConditionalOnBean,表示当容器中存在某个Bean时,会导入组件。

在这里插入图片描述
例如:

@Bean
@ConditionalOnMissingBean(name = "myUtils")// 当容器中不存在名为myUtils的组件时,导入myUtils组件
public MyUtils myUtils(){
    return new MyUtils("aaa", user());
}

ImportResource

Import注解类似,标注在组件类上,通过xml的方式批量导入组件,例如:

@RestController
@ImportResource("classpath:beans.xml")
public class HelloController {

    @RequestMapping("/")
    public String hello() {

        return "hello, springboot";
    }
}

ConfigurationProperties

配置绑定,标注在组件类上,用于将配置与类进行绑定,注意:配置的属性需要有set方法,例如

@ConfigurationProperties(prefix = "user")
@Component
public class User {

    private String id;
    

    public void setId(String id) {
        this.id = id;
    }
}

若我们不想给User类添加Component注解,可以在其他组件类上加一个@EnableConfigurationProperties(User.class),该注解可以让User作为组件,例如:

@Configuration(proxyBeanMethods = true)// 表示当前类为配置类,配置类也是组件
@EnableConfigurationProperties(User.class)
public class MyConfig {}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值