@Bean和@Component都是用于创建一个bean实例.
区别于@Component只能定义bean名称,且只能用于类上
//只能用于类上
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {
//对于被自动定位转换为spring bean的组件,的逻辑组件名的建议
String value() default "";
}
,这样如果只有@Component ,应用想给jar包中的类创建一个bean给spring管理,就没那么简单了.
而@bean属性更丰富,还可以定义在方法上,这样就填补了@component功能的空白
@Target({
ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
@AliasFor("name")
String[] value() default {
};
@AliasFor("value")
String[] name() default {
};
@Deprecated
Autowire autowire() default Autowire.NO;
boolean autowireCandidate() default true;
String initMethod() default "";
String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
}
同时也支持在类被@Configuration注解定义的类中的被@bean定义的方法内,直接调用另一个被@bean注解定义的方法来注入依赖的用法
@Configuration
public class QuartzConfig {
@Bean
MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean() {
MethodInvokingJobDetailFactoryBean bean =