:コンポーネントは、多くの方法がありますがIOCのコンテナに追加された
非層アセンブリがあるため、4つの方法があります。
だから今、インスタンス化されるいくつかのクラスを作成します。まず、Apple.class作成
Banana.class
Orange.class
三つのクラス以外のクラスコンポーネントの3人の代表を。
次に、クラスMyConfig.class構成作成
test.class作成
再配置クラスは、特定の解釈を記載している
:まず、第1の方法を
、直接であってもよく、アレイの形態で得られる上記構成クラス@importを({})を添加し一緒に得られた複数のクラスを有します。
第二の方法は:インターフェイス、インターフェイスを実装する:ImportSelectorを、相補方法が実装されていない持っています。
名前が呼ばれる:クラスメソッドを有するMyImportSelectorは、利用可能なタイプの配列を返し、即ち、一回は、IOCの複数に添加することができます。ここでも、必要性がさらにクラスの前方に配置追加することに注意してください
//@Import(MyImportSelector.class)
第三の方法:選択または実装でインタフェース:ImportBeanDefinitionRegistrarを、前記実行される方法は、ライン上に実装されていません。名前のクラスを変更する:MyImortBeanDefinitionRegistrarは
、構成クラスのコードの部分を追加する必要がある://インポート@({Orange.class、 ImportBeanDefinitionRegistrar.class})
以下のコードは、ああを示します
第四の方法は:
また、インターフェイス機能を実装するように選択される:FactoryBeanの、
以下に示すコードを、私はこのクラスのMyFactoryBeanという名前
:また、結合されたコンフィギュレーション・クラス・コードで、ことに留意されたい
@Bean
パブリックmyfactoryBean FactoryBeanのは(){
新しい新しいMyFactoryBeanを返します();
}
また、テストクラスは、結果をプリントアウトすることを追加する必要がありmyfactoryBean
//この例を区別するために使用され、それは植物自体と結合されている場合、植物自体が、それはアップルクラスなしで
オブジェクトOBJ contet.getBean =(「myfactoryBean」);
のSystem.out.println(OBJ)。
再び&プリントと相まって場合、シンボルであるデフォルトはApple.classクラスにBeanに追加され、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 {
}
package org.awen.config;
import org.awen.AddBeanWithImport.Apple;
import org.awen.AddBeanWithImport.MyImportSelector;
import org.awen.AddBeanWithImport.Orange;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import AddBeanWithFactoryBean.MyFactoryBean;
import ora.awen.entity.Course;
import ora.awen.entity.Student;
@Configuration
//下面的方法都是讲非三层加入到IOC容器种
//最初始的第一种方式就是 直接在方法的前面加上bean就可以了
//这是第一重方法,直接在配置类中加入Import
//@Import({Apple.class})
//这是第二种方法,实现一个ImportSelector
//@Import(MyImportSelector.class)
//这是第三种方法,实现一个接口ImportBeanDefinitionRegistrar
//@Import({Orange.class,ImportBeanDefinitionRegistrar.class})
//这是第四种方法,将非三层类加入到容器种
/*
@Bean
public FactoryBean<Apple> myfactoryBean(){
return new MyFactoryBean();
}
*/
第四种方法,江浙段代码 ,放置到配置类里面既可以。
public class MyConfig {
}
package ora.awen.test;
import org.awen.config.MyConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import ora.awen.entity.Student;
public class test {
public static void main(String args[]) {
/**
* 给非三层类通过注解加入到bean中
* 1.在配置类中加入Import({Apple.class,Orange.class})
* 2.自定义将非三层组件的类加入到容器中
* */
ApplicationContext contet=new AnnotationConfigApplicationContext(MyConfig.class); //执行从springIOC容器中获取一个id为student的对象
System.out.println("============");
//这个用于区别实例和工厂本身,如果加上就是工厂本身,不加的话就是Apple类
//Object obj=contet.getBean("myfactoryBean");
//System.out.println(obj);
System.out.println("============");
String[] ids=contet.getBeanDefinitionNames();
for(String id:ids) {
System.out.println(id);
}
System.out.println("============");
}
}
public class MyImportSelector implements ImportSelector{
/**
* 给非三层类通过注解加入到bean中
* 1.在配置类中加入Import({Apple.class,Orange.class})
* 2.自定义
* */
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
// TODO 自动生成的方法存根
return new String[] {"org.awen.AddBeanWithImport.Orange","org.awen.AddBeanWithImport.Apple"};
}
}
package org.awen.AddBeanWithImport;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
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);
}
}
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;
}
}