天津网站建设技术支持,互联网做网站排明,深圳小蚁人网站建设,青岛网站建设q.479185700強目录 1、xml方式2、CompontScan Component3、使用 Bean方式4、使用Import 注解5、FactoryBean 工厂 bean6、使用 ImportBeanDefinitionRegistrar 向容器中注入Bean7、实现 ImportSelector 接口 1、xml方式
使用 xml 的方式来声明 Bean 的定义#xff0c;Spring 容器在启动的… 目录 1、xml方式2、CompontScan Component3、使用 Bean方式4、使用Import 注解5、FactoryBean 工厂 bean6、使用 ImportBeanDefinitionRegistrar 向容器中注入Bean7、实现 ImportSelector 接口 1、xml方式
使用 xml 的方式来声明 Bean 的定义Spring 容器在启动的时候会加载并解析这个 xml把 bean 装载到 IOC 容器中。
2、CompontScan Component
使用CompontScan 注解来扫描声明了Controller、Service、 Repository、Component 注解的类。
3、使用 Bean方式
使用Configuration 注解声明配置类并使用Bean 注解实现 Bean 的定义这种方式其实是 xml 配置方式的一种演变是 Spring 迈入到无配置化时代的里程碑。
4、使用Import 注解
使用Import 注解导入配置类或者普通的 Bean
在Spring中使用Import注解可以将其他配置类Configuration类中定义的Bean引入到当前的配置类中。这允许你在一个配置类中引入其他配置类从而将它们的Bean定义整合到一个应用上下文中。
以下是使用Import注解的简单示例
Configuration
public class AppConfig1 {Beanpublic MyBean myBean() {return new MyBean();}
}Configuration
Import(AppConfig1.class)
public class AppConfig2 {// AppConfig2 中可以直接使用 AppConfig1 中定义的 MyBean
}在上述示例中AppConfig2通过Import(AppConfig1.class)注解引入了AppConfig1中的Bean定义。这样在AppConfig2中就可以直接使用AppConfig1中定义的MyBean。
你还可以一次引入多个配置类只需要在Import注解中传入一个包含所有要引入的配置类的数组如
Import({AppConfig1.class, AnotherConfig.class, YetAnotherConfig.class})5、FactoryBean 工厂 bean
使用 FactoryBean 工厂 bean动态构建一个 Bean 实例Spring CloudOpenFeign 里面的动态代理实例就是使用 FactoryBean 来实现的。
6、使用 ImportBeanDefinitionRegistrar 向容器中注入Bean
实现 ImportBeanDefinitionRegistrar 接口可以动态注入 Bean 实例。这个在Spring Boot 里面的启动注解有用到。
ImportBeanDefinitionRegistrar是Spring提供的一个接口允许你在运行时动态地注册Bean定义到Spring容器中。通过实现这个接口你可以在配置类上使用Import注解并在registerBeanDefinitions方法中自定义添加Bean定义。
以下是一个简单的示例演示如何使用ImportBeanDefinitionRegistrar接口注入一个Bean
创建需要注入的Bean
public class MyInjectedBean {// ...
}实现ImportBeanDefinitionRegistrar接口
public class MyBeanRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware {private Environment environment;Overridepublic void setEnvironment(Environment environment) {this.environment environment;}Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {// 通过注册Bean定义的方式将 MyInjectedBean 注入到 Spring 容器中GenericBeanDefinition beanDefinition new GenericBeanDefinition();beanDefinition.setBeanClass(MyInjectedBean.class);registry.registerBeanDefinition(myInjectedBean, beanDefinition);}
}在配置类中使用Import注解导入ImportBeanDefinitionRegistrar
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;Configuration
Import(MyBeanRegistrar.class)
public class AppConfig {// 此处不需要声明 MyInjectedBean 的 Bean 方法它会由 MyBeanRegistrar 动态注册
}在这个示例中MyBeanRegistrar实现了ImportBeanDefinitionRegistrar接口并在registerBeanDefinitions方法中注册了MyInjectedBean的Bean定义。然后在AppConfig配置类中使用Import注解将MyBeanRegistrar导入从而在Spring容器中动态注册了MyInjectedBean。
这种方式允许你在运行时根据需要动态地注册Bean定义提供了更灵活的配置和扩展机制。
7、实现 ImportSelector 接口
实现 ImportSelector 接口动态批量注入配置类或者 Bean 对象这个在 SpringBoot 里面的自动装配机制里面有用到