前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring boot @Bean源码分析

Spring boot @Bean源码分析

作者头像
潇洒
发布2019-07-03 11:10:55
1K0
发布2019-07-03 11:10:55
举报
文章被收录于专栏:石头岛石头岛

1.先看下 Bean 注解的内容

代码语言:javascript
复制
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
    @AliasFor("name")
    String[] value() default {};
    @AliasFor("value")
    String[] name() default {};
    Autowire autowire() default Autowire.NO;
    String initMethod() default "";
    String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
}

Target 中指定了注解的使用范围是METHONANNOTATION_TYPE,就是限定方法 和 注解上可以使用。

@Target(ElementType.METHOD) //方法 @Target(ElementType.ANNOTATION_TYPE)//注解

value – bean别名和name是相互依赖关联的,value,name如果都使用的话值必须要一致 name – bean名称,如果不写会默认为注解的方法名称 autowire – 自定装配默认是不开启的,建议尽量不要开启,因为自动装配不能装配基本数据类型、字符串、数组等,这是自动装配设计的局限性,以及自动装配不如显示依赖注入精确 Spring引入Autowire(自动装配)机制就是为了解决标签下标签过多的问题,标签过多会引发两个问题:

  • 如果一个Bean中要注入的对象过多,比如十几二十个(这是很正常的),那将导致Spring配置文件非常冗长,可读性与维护性差
  • 如果一个Bean中要注入的对象过多,配置麻烦且一不小心就容易出错 default-autowire有四种取值:
  • no:默认,即不进行自动装配,每一个对象的注入比如依赖一个标签
  • byName:按照beanName进行自动装配,使用setter注入
  • byType:按照bean类型进行自动装配,使用setter注入
  • constructor:与byType差不多,不过最终属性通过构造函数进行注入

通过测试类,可以看到这个注解的

代码语言:javascript
复制
/**
 * @author liukai
* @data 2019/4/15 21:53.
 */
@Configuration
public class ConfigTest {

    @Bean(name = "config_test")
    public User user () {
        User user = new User();
        user.setAuthor("liu big big");
        user.setName("刘大大");
        return user;
    }


    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
        ac.register(ConfigTest.class);
        ac.refresh();
        User user = (User) ac.getBean("config_test");
        System.out.println(user.getAuthor());
        System.out.println(user.getName());
    }
}

//liu big big //刘大大

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档