Spring Bean的定义(含创建Bean的三种方式)

简介: Spring Bean的定义(含创建Bean的三种方式)

🏆 文章目标:复习和理解下Spring Bean的定义

🍀 Spring Bean的定义(含创建Bean的三种方式)

✅ 创作者:Jay…

🎉 个人主页:Jay的个人主页

🍁 展望:若本篇讲解内容帮助到您,请帮忙点个赞吧,您的支持是我继续写作的最大动力,谢谢。🙏

定义

Spring bean 对象是构成应用程序的支柱,也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的。

创建Bean

基于XML配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="beanDemoJay" class="demo.BeanDemoJay"/>
</beans>

基于注解扫描的配置

从 Spring 2.5 开始就可以使用注解来配置依赖注入,在可以使用基于注解的配置之前,我们将需要在我们的 Spring 配置文件中启用它。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 开启基于注解的配置 -->
    <context:annotation-config/>
    <!-- bean definitions go here -->
</beans>

当开启后,将可以在代码上使用注解,这表明 Spring 应该自动连接值到属性,方法和构造函数。如下是常用的注解:

序号 说明
1 @Required 注解应用于 bean 属性的 setter 方法。
2 @Autowired 注解可以应用到 bean 属性的 setter 方法,非 setter 方法,构造函数和属性。
3 @Qualifier通过指定确切的将被连线的 bean,@Autowired 和 @Qualifier 注解可以用来删除混乱。
4 JSR-250 AnnotationsSpring 支持 JSR-250 的基础的注解,其中包括了 @Resource,@PostConstruct 和 @PreDestroy 注解。

基于Java的配置

基于 Java 的配置,可以使你在不用配置 XML 的情况下编写大多数的 Spring,主要通过 @Configuration 和 @Bean 等注解。

Component系列
注解 说明
@Component 最普通的一个注解,一般用于把普通pojo实例化到spring容器中。@Controller 和 @Service 和@Repository 是它的特殊情况,只是作为一个普通的类,不需要特殊归类时,比较适合采用@Component注解。
@Controller 用于标注控制层,表示向控制层注入服务层的数据
@Service 用于标注服务层,来进行业务的逻辑处理,在服务层注入DAO层数据
@Repository 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
@Configuration 用于定义配置类,可替换xml配置文件,也可以理解为Spring配置文件当中的上下文。
依附于@Configuration的注解

@Bean 创建Deom

@Configuration
public class Demo {
    @Bean
    public Demo demo(){
        return new Demo();
    }
}

@Import 创建Cofing

@Configuration
@Import(Config.class)
public class Demo {
    
}

@Import.ImportSelector 选择器,传入@Import注解所在类Demo上所有的注解信息,返回要导入的类名

@Configuration
@Import(ImportSelector_.class)
public class Demo {   
}
public class ImportSelector_ implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"com.spring.demo.beanlifecycle.Demo"};
    }
}

@Impport.ImportBeanDefinitionRegistrar Bean定义注册器,传入@Import注解所在类Demo上所有的注解信息:

Mybatis的Mapper接口就是用这种方式将Bean定义注册到Spring上下文的

@Configuration
@Import(ImportBeanDefinitionRegistrar_.class)
public class Demo {
}
public class ImportBeanDefinitionRegistrar_ implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Bean.class).setInitMethodName("init").setDestroyMethodName("destroy").getBeanDefinition();
        registry.registerBeanDefinition("bean", beanDefinition);
        System.out.println("registerBeanDefinitions: " + beanDefinition);
    }
}
FactoryBean

当通过“factoryBean”获取实例时,FactoryBean会调用getObject()方法;

当通过“&factoryBean”获取实例时,返回FactoryBean的实例;

当通过Demo.class来获取bean实例时,调用factoryBean的getObjectTyoe()来获取类型。

@Configuration
public class Demo {
    @Bean
    public FactoryBean_ factoryBean(){
        return new FactoryBean_();
    }
}
public class FactoryBean_ implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        return new Demo();
    }
    @Override
    public Class<?> getObjectType() {
        return Demo.class;
    }
}


关注公众号:熊猫Jay字节之旅,了解更多 AI 技巧 ~

相关文章
|
3月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
11天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
1月前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
66 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
2月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
205 24
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
29天前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
2月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
210 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
2月前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
73 1
|
1月前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
38 1
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
84 1