一、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 {@Beanpublic 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);}}