方式一:装配类装配
第一步定义bean
public class MyBean {
}
第二部定义装配类
@Configuration//装配类注解
public class MyConfig {
@Bean
@Scope("prototype")//设置多例
public MyBean createMyBean() {
return new MyBean();
}
}
测试
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
// AnnotationConfigApplicationContext context1 = new AnnotationConfigApplicationContext("com.jiulin.spring");//扫描包转摘配置类。
System.out.println(context.getBean(MyBean.class));
context.close();
}
}
方式二:工厂类创建bean
第一步:定义bean
public class Jeep {
}
第二部:定义工厂类
public class RunableFactoryBean implements FactoryBean<Jeep> {
public Jeep getObject() throws Exception {
return new Jeep();
}
public Class<?> getObjectType() {
return Jeep.class;
}
public boolean isSingleton() {
return false;
}
}
第三步:配置配
@Configuration//装配类注解
public class MyConfig {
@Bean
public RunableFactoryBean createRunableFactoryBean() {
return new RunableFactoryBean();
}
}
第四步:测试
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
// AnnotationConfigApplicationContext context1 = new AnnotationConfigApplicationContext("com.jiulin.spring");//扫描包转摘配置类。
System.out.println(context.getBean(RunableFactoryBean.class));//com.jiulin.spring.RunableFactoryBean@4e4aea35
System.out.println(context.getBean("&createRunableFactoryBean"));//com.jiulin.spring.RunableFactoryBean@4e4aea35
System.out.println(context.getBean("createRunableFactoryBean"));//com.jiulin.spring.Jeep@1442d7b5
context.close();
}
}
方式三:自定义工厂
第一步:定义bean
public class Car {
}
第二步:自定义工厂
public class CarFactory {
public Car createCar(){
return new Car();
}
}
第三步:配置类
@Configuration//装配类注解
public class MyConfig {
@Bean
public CarFactory createCarFactory() {
return new CarFactory();
}
@Bean
public Car createCar(CarFactory factory) {
return factory.createCar();
}
}
第四步:测试
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
// AnnotationConfigApplicationContext context1 = new AnnotationConfigApplicationContext("com.jiulin.spring");//扫描包转摘配置类。
System.out.println(context.getBean("createCar"));//com.jiulin.spring.Car@1ee807c6
System.out.println(context.getBean("&createCar"));//获得工厂类
context.close();
}
}
在创建Car时需要CarFactory,spring会自动在容器中查询,并注入。