接上篇:
三: @Import(value=""):快速的给容器导入一个组件
1:value:要导入到容器中的组件(例如@Import(自定义.类)
2:实现ImportSelector接口(myImportSelector.java):返回需要导入的组件的全类名数组:常用
myImportSelector.java:
public class myImportSelector implements ImportSelector {
//AnnotationMetadata:可以获取当前标注@Import注解类的所有注解信息(比如@Conditional)
@Override
public String[]
selectImports(AnnotationMetadata importingClassMetadata) {
// TODO Auto-generated method stub
return new
String[]{“com.lh.service.UserService”,“com.lh.po.user”};
}
}
3:实现ImportBeanDefinitionRegistrar接口(myImportBeanDefinitionRegistrar.java):
myImportBeanDefinitionRegistrar.java
public class myImportBeanDefinitionRegistrar implements
ImportBeanDefinitionRegistrar {
//AnnotationMetadata:当前标注@Import的类的所有注解信息
//BeanDefinitionRegistry:BeanDefinition注册类
//获取到所有注册类,通过BeanDefinitionRegistry.registerBeanDefinition方法手动注册
@Override
public void
registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry) {
//registry.containsBeanDefinition:判断当前容器中是否存在这个bean
boolean
containsBeanDefinition = registry.containsBeanDefinition(“userDao”);
if(containsBeanDefinition)
{
//RootBeanDefinition:自定义bean,要注册的bean(可以传入bean的类名,直接传入名称等等)
RootBeanDefinition
rootBeanDefinition = new RootBeanDefinition(RootBean.class);
//指定bean名,这个名称就是注册的bean的name名称
registry.registerBeanDefinition("RootBean",
rootBeanDefinition);
}
}
}
4:使用spring提供的FactoryBean(工厂):也是实现这个接口:myFactoryBean.java
myFactoryBean.java:
package com.lh.util;
import org.springframework.beans.factory.FactoryBean;
import com.lh.po.Factory;
//创建一个Spring定义的FactoryBean
public class myFactoryBean implements
FactoryBean {
//返回一个Factory对象,这个对象会添加到容器中
//获取到这个factory对象的方法:getObject
@Override
public
Factory getObject() throws Exception {
//
TODO Auto-generated method stub
System.out.println("容器被创建:Factory");
return
new Factory();
}
//获取这个factory对象的类型:getObjectType
@Override
public
Class<?> getObjectType() {
//
TODO Auto-generated method stub
return
Factory.class;
}
//是否为单实例:isSingleton
//返回true:表示这个bean是单实例,在容器中只会保留一份
//返回false:表示这个bean是多实例,每次获取都会创建一个新的bean保留到容器中:调用getObject()来创建;
@Override
public
boolean isSingleton() {
//
TODO Auto-generated method stub
return
true;
}
}