是否可以使用工厂在Spring中动态实例化bean?
我希望能够在检测到特定注释时实例化一些bean。
E.g。
@Retention ( RetentionPolicy.RUNTIME)
@Target (ElementType.TYPE)
@Import(CreateFooRegistrar.class)
public @interface CreateFoo {
String name();
}
public interface Foo {
String getName();
void setName(String name);
}
public class FooImpl implements Foo {
...
}
我可以使用具体类直接创建bean:
public class CreateFooRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
AnnotationAttributes attributes = AnnotationAttributes.fromMap(importingClassMetadata.getAnnotationAttributes(CreateFoo.class.getName()));
String fooName = attributes.getString("name");
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(FooImpl.class);
builder.addPropertyValue("name", fooName);
registry.registerBeanDefinition(fooName + "Foo", builder.getBeanDefinition());
}
}
但是有什么方法可以使用工厂返回的对象创建bean吗?
E.g。
public class FooFactory {
public static FooImpl create(String name) {
FooImpl foo = new FooImpl();
foo.setName(name);
return foo;
}
}
我问的原因是我想要自动创建的所有bean通常都是通过工厂实例化的。我不拥有工厂代码,所以我不想尝试自己模仿其内部工作。