-
通过@ComponentScan @Controller @Service @Respository @Component使用场景: 针对我们自己写的组件可以通过该方式来进行加载到容器中。
-
通过@Bean的方式来导入组件(实用于导入第三方组件的类),用于导入第三方组件
-
通过@Import来导入 组件(导入组件的id为全类名路径),用于导入第三方组件
@Configuration
//@Import(value = {Person.class, Car.class})
//@Import(value = {Person.class, Car.class, YjImportSelector.class})
@Import(value = {Person.class, Car.class, YjImportSelector.class, YjBeanDefinitionRegister.class})
public class MainConfig {
}
通过@Import 的ImportSeletor类实现组件的导入 (导入组件的id为全类名路径)
public class YjImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.yj.testimport.compent.Dog"};
}
}
通过@Import的 ImportBeanDefinitionRegister导入组件 (可以指定bean的名称)
public class YjBeanDefinitionRegister implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Cat.class);
registry.registerBeanDefinition("cat",rootBeanDefinition);
}
}
-
通过实现FactoryBean接口来实现注册组件,负责初始化。
获取驱动:
public class DriverFactoryBean implements FactoryBean {
private String jdbcUrl;
public String getJdbcUrl() {
return jdbcUrl;
}
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
@Override
public Object getObject() throws Exception {
return DriverManager.getDriver(jdbcUrl);
}
@Override
public Class<?> getObjectType() {
return java.sql.Driver.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
@Configuration
@ImportResource(locations = {"classpath:beans.xml"})
public class MainConfig {
@Bean
public CarFactoryBean carFactoryBean() {
return new CarFactoryBean();
}
}
bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="car" class="com.yaspeed.testconfiuration.compent.Car"></bean>
<bean id="driverFactoryBean" class="com.yaspeed.testfactorybean.DriverFactoryBean">
<property name="jdbcUrl" value="jdbc:mysql://106.15.36.5:3306/rds"></property>
</bean>
</beans>
public class CarFactoryBean implements FactoryBean<Car> {
/返回bean的对象
@Override
public Car getObject() throws Exception {
return new Car();
}
/返回bean的类型
@Override
public Class<?> getObjectType() {
return Car.class;
}
/是否为单利
@Override
public boolean isSingleton() {
return true;
}
}