springBoot bean的多种加载方式

编程入门 行业动态 更新时间:2024-10-24 11:17:41

springBoot bean的多种<a href=https://www.elefans.com/category/jswz/34/1771433.html style=加载方式"/>

springBoot bean的多种加载方式

1、通过xml

2、通过注解@Component及其衍生注解@Controller、@Service、@Repository定义bean

    例子:

        @Component

       public void Car{

       }

3、使用@Configuration定义成一个配置类

     @Configuration

      public void Car{

       }

4、实现FactoryBean

       例子:        

public class Car {
}
public class CarFactoryBean implements FactoryBean<Car> {@Overridepublic Car getObject() throws Exception {Car car = new Car();//创建这个bean前,在这边可以自定义处理一些业务逻辑return car;}@Overridepublic Class<?> getObjectType() {return Car.class;}@Overridepublic boolean isSingleton() {return FactoryBean.super.isSingleton();}
}
@Configuration
public class SpConfig {@Beanpublic CarFactoryBean car(){return new CarFactoryBean();}
}

5、加载配置类并加载配置文件

例子:

public class Car {
}

app.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"><bean id="car" class="com.melax.ailatest.bean.Car"></bean>
</beans>
@Configuration
@ImportResource("app.xml")
public class SpConfig2 {}

6、使用@Import注解方式导入,被导入的bean无需使用注解申明为bean

public class Car {
}
@Import({Car.class})
public class SpConfig3 {}

7、导入实现了ImportSelector接口的类,实现了对导入源的编程时处理

示例:

public class Car {
}
public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//各种条件判断boolean b = importingClassMetadata.hasAnnotation("org.springframework.context.annotation.Import");System.out.println("flag:"+b);if (b){return new String[]{"com.melax.ailatest.bean.car"};}else {return new String[0];}}
}
@Import({MyImportSelector.class})
public class SpConfig4 {}

8、导入实现了ImportBeanDefinitionRegistrar接口的类,通过BeanDefinition注册器注册实名bean,实现对容器中bean的裁定,例如对现有bean的覆盖,进而达成不修改源代码的情况下更换实现的效果

public class Car {
}
public class Dog {
}
public class MyImportBeanDefinition implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Dog.class).getBeanDefinition();//实现对car bean的覆盖,当前car的对象是dogregistry.registerBeanDefinition("car",beanDefinition);}
}
@Import({MyImportBeanDefinition.class})
public class SpConfig5 {@Beanpublic Car car(){return new Car();}
}

9、导入实现了BeanDefinitionRegistryPostProcessor接口的类,通过BeanDefinition的注册器注册实名bean实现对容器中bean的最终定义

public class Car {
}
public class Car2 {private String name;@Overridepublic String toString() {return "Car2{" +"name='" + name + '\'' +'}';}
}
public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//各种条件判断boolean b = importingClassMetadata.hasAnnotation("org.springframework.context.annotation.Import");System.out.println("flag:"+b);if (b){return new String[]{"com.melax.ailatest.bean.car"};}else {return new String[0];}}
}
@Import({MyPostProcessor.class})
public class SpConfig6 {@Beanpublic Car car(){return new Car();}
}

更多推荐

springBoot bean的多种加载方式

本文发布于:2023-11-17 13:44:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1642505.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:加载   多种   方式   springBoot   bean

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!