Spring注解之@Component详细解析

@Component是一个元注解,意思是可以注解其他类注解,如@Controller @Service @Repository @Aspect。官方的原话是:带此注解的类看为组件,当使用基于注解的配置和类路径扫描的时候,这些类就会被实例化。其他类级别的注解也可以被认定为是一种特殊类型的组件,比如@Repository @Aspect。所以,@Component可以注解其他类注解。

注意:不指定bean的名称,默认为类名首字母小写,有时候忘记了报错找不到bean还想半天

源代码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {

    /**
     *该值可能表明建议使用逻辑组件名称,
     *如果自动检测到组件,则将其转换为Spring bean。
     *@返回建议的组件名称(如果有的话)(否则返回空字符串)
     */
    String value() default "";

}

案例:
a.不指定bean的名称,默认为类名首字母小写ocryyzd

/**
 * @Author dx
 * @Date 2020/1/5 0:34
 **/
@Component
public class Ocryyzd implements OcrDotrade {
    @Override
    public void dotrade() {

        System.out.println("营业执照识别");

    }
}

获取bean方式:

public class SpringbootstudyApplication {

    @Autowired
    private BeanFactory beanFactory;

    public static void main(String[] args) {
        SpringApplication.run(SpringbootstudyApplication.class, args);
    }

    @RequestMapping("/")
    @GetMapping
    String index(){
        OcrDotrade ocryyzd1 = (OcrDotrade) beanFactory.getBean("ocryyzd");
        ocryyzd1.dotrade();
    }
}

b.指定bean的名称

/**
 * @Author dx
 * @Date 2020/1/5 0:34
 **/
@Component("Ocryyzd")
public class Ocryyzd implements OcrDotrade {
    @Override
    public void dotrade() {
        System.out.println("营业执照识别");
    }
}

获取bean方式:

public class SpringbootstudyApplication {

    @Autowired
    private BeanFactory beanFactory;

    public static void main(String[] args) {
        SpringApplication.run(SpringbootstudyApplication.class, args);
    }

    @RequestMapping("/")
    @GetMapping
    String index(){
        OcrDotrade ocryyzd1 = (OcrDotrade) beanFactory.getBean("Ocryyzd");
        ocryyzd1.dotrade();
    }
}

你可能感兴趣的:(Spring注解之@Component详细解析)