spring中非三层组件中通过注解的方式加入到IOC中

将组件加入到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中的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值