1.xml配置
無參構(gòu)造
<bean id="xxx" class="xxx">
靜態(tài)工廠
<bean id="xxx" class="xxx" factory-method="xxx">
實例工廠
<bean id="factoryBean" class="xxx">
<bean id="xxx" class="xxx" factory-bean="factoryBean" factory-method="xxx">
2.注解
@Componse盐类、@Service、@Controller僚饭、@Repository
3.javaConfig
@Configuration
public classUserConfiguration{
@Bean
public User user(){
return new User();
}
}
4.使用@Import嘉涌,一般在自定義擴(kuò)展的時候使用
@Import(User.class)
public class webApplication{
public static void main(String[] args){
}
}
5.實現(xiàn)ImportSelector或者ImportBeanDefinitionRegistrar接口
這個一般會結(jié)合@Import一起使用,通過擴(kuò)展自定義注解的方式來實現(xiàn)動態(tài)Bean注入
// 設(shè)置class
public class MyImportSelector implements ImpportSelector{
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata){
return new String[]{User.class.getName()};
}
}
// 創(chuàng)建自定義的BeanDefinition
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar{
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry){
BeanDefinition beanDefinition = new RootBeanDefinition(User.class.getName());
beanDefinitionRegistry.registerBeanDefinition(User.class.getName(),beanDefinition);
}
}
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.TYPE)
@Import({MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
public @interface EnableImportSelector {
String value();
}
6.手動注入Bean實例饼丘,或者BeanDefinition
@Component
public class LocationRegister implements BeanFactoryAware {
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
DefaultListableBeanFactory listableBeanFactory = (DefaultListableBeanFactory)beanFactory;
//方式1
// Location location = new Location();
// listableBeanFactory.registerSingleton(Location.class.getName(),location);
//方式2
BeanDefinition locationBeanDefinition = new RootBeanDefinition(Location.class);
listableBeanFactory.registerBeanDefinition(Location.class.getName(),locationBeanDefinition);
}
}
7.FactoryBean實現(xiàn)Bean注入
實現(xiàn)FactoryBean接口趁桃,重寫getObject()方法
8.通過Supplier方式創(chuàng)建Bean
// 方式1
AnnotationConfigApplicationContext.registerBean("user",new Supplier<User>(){
@Override
public User get(){
return new User();
}
});
// 方式2
GenericBeanDefinition beanDefinition=new GenericBeanDefinition();
beanDefinition.setInstanceSupplier(()->new User());
AnnotationConfigApplicationContext.registerBeanDefinition("user", beanDefinition);
9.通過Spring boot starter的方式
在resources下創(chuàng)建META-INF/spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.test.UserConfiguration
public class UserConfiguration{
@Bean
public User user(){
return new User();
}
}