方式一:裝配類裝配
第一步定義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會自動在容器中查詢,並注入。