将组件加入到IOC容器有很多方法:
对于非三层组件来说,又有四种方法。
创建实例,举例说明。创建类,下面演示如何将其用不一样的方法添加到bean中。
代码分别为:
//Apple.class
package org.awen.AddBeanWithImport;
public class Apple {
}
//Banana.class
package org.awen.AddBeanWithImport;
public class Banana {
}
//Orange.class
package org.awen.AddBeanWithImport;
public class Orange {
}
第一种:
使用MyConfig.class的情况下,直接在配置类中加入Import
@Configuration//这个代表着,也将这个MyConfig添加到bean之中
@Import({Apple.class})
public class MyConfig {
}
第二种:
定义一个类,该类实现一个接口,该接口为:ImportSelector,然后在定义类中补充未实现得方法。
public class MyImportSelector implements ImportSelector{
/**
* 给非三层类通过注解加入到bean中
*
* 2.自定义
* */
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
// TODO 自动生成的方法存根
return new String[] {"org.awen.AddBeanWithImport.Orange","org.awen.AddBeanWithImport.Apple"};
}
}
然后在配置类中写:
//这是第二种方法,实现一个ImportSelector
@Import(MyImportSelector.class)
public class MyConfig {
}
第三种方法:
实现一个接口ImportBeanDefinitionRegistrar,然后实现其中未实现的方法就行了。
public class MyImortBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar{
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
// TODO 自动生成的方法存根
BeanDefinition beanDefinition=new RootBeanDefinition(Orange.class);
//因为下面的这个需要这个类型beanDefinition 所以 上面 只是为了配合下面的
registry.registerBeanDefinition("mrorange", beanDefinition);
}
}
MyConfig.class中得代码:
//这是第三种方法,实现一个接口ImportBeanDefinitionRegistrar
@Import({Orange.class,MyImortBeanDefinitionRegistrar.class})
public class MyConfig {
}
第四种方法:
同样也是选择实现一个接口工厂: FactoryBean,
在这里分别测试了两个类,分别为Apple.class 和 Orange.class
Apple.class代码
package AddBeanWithFactoryBean;
import org.awen.AddBeanWithImport.Apple;
import org.springframework.beans.factory.FactoryBean;
public class MyFactoryBean implements FactoryBean{
@Override
public Object getObject() throws Exception {
// TODO 自动生成的方法存根
return new Apple();
}
@Override
public Class getObjectType() {
// TODO 自动生成的方法存根
return null;
}
@Override
public boolean isSingleton() {
// TODO 自动生成的方法存根
return false;
}
}
Orange.class代码
package AddBeanWithFactoryBean;
import org.awen.AddBeanWithImport.Apple;
import org.awen.AddBeanWithImport.Orange;
import org.springframework.beans.factory.FactoryBean;
public class MyFactoryBean_one implements FactoryBean{
@Override
public Object getObject() throws Exception {
// TODO 自动生成的方法存根
return new Orange();
}
@Override
public Class getObjectType() {
// TODO 自动生成的方法存根
return null;
}
@Override
public boolean isSingleton() {
// TODO 自动生成的方法存根
return false;
}
}
Config.class里面;
public class MyConfig {
@Bean
public FactoryBean<Apple> myfactoryBean(){
return new MyFactoryBean();
}
@Bean
public FactoryBean<Orange> myfactoryBean_one(){
return new MyFactoryBean_one();
}
}
//这个用于区别实例和工厂本身,如果加上就是工厂本身,不加的话就是Apple类
Object obj=contet.getBean(“myfactoryBean”);
System.out.println(obj);
在于一个符号,如果加上这个&,再次打印就是将该类添加到bean中了,默认是将Apple.class类加入到bean中的。