@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();
}
}