一、Spring bean
1.1、概述
一句话,被Spring容器管理的bean就是Spring bean。
二、Java bean VS Spring bean
2.1、概述
Java bean是程序员自己new 出来的,Spring bean是Spring工厂创建出来的。
三、配置bean的方式
3.1、概述
所谓配置bean,是指如何将一个普通的Java类交由Spring容器进行管理。
3.2、配置方式
# 第一种
xml
# 第二种
xml + 注解
# 第三种
JavaConfig
# 第四种
@Import
四、@Component vs @Bean
4.1、概述
@Component是Spring中的一个注解,通常标识在一个类上面,用于说明该类是被Spring容器管理的,其内部是通过反射机制调用构造方法完成实例化,@Bean也是一个注解,标识在方法上,通常和@Configuration注解搭配使用,其方法名就是bean的name,通过这种方式程序员可以自己控制bean的实例化过程。
4.2、案例
4.2.1、Car
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/26 14:28
* @Description:
*/
@Component
@Getter
@Setter
public class Car implements Serializable {
private String name;
private String description;
public Car() {
System.out.println("Car的无参构造执行了...");
}
public Car(String name, String description) {
this.name = name;
this.description = description;
System.out.println("Car的有参构造执行了...");
}
}
4.2.2、Tank
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/26 14:31
* @Description:
*/
@ToString
@Getter
@Setter
public class Tank implements Serializable {
private String name;
private String description;
private String producer;
public Tank() {
System.out.println("Tank的无参构造执行了...");
}
public Tank(String name, String description, String producer) {
System.out.println("Tank的有参构造执行了...");
this.name = name;
this.description = description;
this.producer = producer;
}
}
4.2.3、MySpringConfig
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/23 15:29
* @Description:
*/
@Configuration
@ComponentScan(basePackages = {"org.star"})
public class MySpringConfig {
@Bean
public Tank tank() {
Tank tank = new Tank("东风0001","加满油能跑10000公里","中国");
return tank;
}
}
4.2.4、AopFullAnnotationMainApp
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/23 15:14
* @Description:
*/
@Slf4j
public class AopFullAnnotationMainApp {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MySpringConfig.class);
Car car = context.getBean("car", Car.class);
Tank tank = context.getBean("tank", Tank.class);
log.info("car:{},tank:{}", car, tank);
}
}