Spring--FactotyBean的自我介绍

简介: Spring--FactotyBean的自我介绍

前言


路遥说,在一个平凡的世界里,人要承受一定的痛苦和不安。但只要相信个体奋斗的力量,坚定地与生存搏斗,就能过上想要的生活。

很喜欢《平凡的世界》的一句话,一直不断的鼓励我努力向前,也送个各位看到这个写的很烂的文章的人,共勉~


FactotyBean


Spring 有两种类型bean,一种普通bean,另外一种工厂bean(FactoryBean)

(1)普通bean在配置文件中,定义bean类型就是返回类型

(2)工厂bean在配置文件中定义bean类型可以和返回类型不一样

第一步创建类,让这个类作为工厂Bean,实现接口FactoryBean

第二步实现接口里的方法,在实现方法中定义返回的bean类型

如下程序:

xm文件中定义的返回bean返回类型是Mybean

然后我实现接口后,定义返回的类型为Course类型的bean


package com.caq.spring5.factorybean;
import com.caq.spring5.collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;
public class MyBean implements FactoryBean<Course> {
//    定义返回bean
    @Override
    public Course getObject() throws Exception {
        Course course = new Course();
        course.setCname("abc");
        return course;
    }
    @Override
    public Class<?> getObjectType() {
        return null;
    }
    @Override
    public boolean isSingleton() {
        return false;
    }
}

bean作用域


(1)在spring里,设置创建Bean实例是单实例还是多实例。

(2)在spring里,默认设置创建Bean实例是单实例。

(3)如何设置单实例还是多实例。

spring配置文件bean标签里scope属性用于设置单实例还是多实例。

scope属性值:第一个,默认值,singleton,表示单实例对象;第二个值:prototype,表示多实例对象。


<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    <bean id="myBean" class="com.caq.spring5.factorybean.MyBean">
    </bean>
</beans>

因为是多实例所以是两个不同的地址

(4)singleton 与 prototype区别

第一,singleton表示单实例,prototype表示多实例。

第二,设置Scope是singleton时,加载spring配置文件时侯就会创建单实例对象;

设置Scope是prototype时,不是加载spring配置文件时侯创建对象,而是在调用getBean方法时创建多实例对象。

request,表示一次请求,每次创建对象放到request域对象中。

session,表示一次会话,每次创建对象放到session域对象中。


生命周期


什么是生命周期?

从对象创建到对象销毁的过程

bean生命周期

(1)通过构造器创建bean实例(无参数构造)

(2)为bean的属性设置值和对其他bean引用(调用set方法) (3)调用bean的初始化的方法(需要进行配置)

(4)bean可以使用了(对象获取到了)

(5)当容器关闭的时候,调用bean的销毁的方法(需要进行配置销毁的方法)

bean的后置处理器,bean生命周期有七步

(1)通过构造器创建bean实例(无参数构造)

(2)为bean的属性设置值和对其他bean引用(调用set方法)

(3)把bean实例传递bean后置处理器的方法postProcessBeforeInitialization

(4)调用bean的初始化的方法(需要进行配置)

(5)把bean实例传递bean后置处理器的方法postProcessAfterInitialization

(6)bean可以使用了(对象获取到了)

(7)当容器关闭的时候,调用bean的销毁的方法(需要进行配置销毁的方法)


package com.caq.spring5.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.lang.Nullable;
public class MyBeanPost implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("在初始化之前执行的方法");
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("在初始化之后执行的方法");
        return bean;
    }
}


package com.caq.spring5.bean;
public class Orders {
    private String oname;
    public Orders() {
        System.out.println("第一步 执行无参构造创建bean实例");
    }
    public void setOname(String oname){
        this.oname = oname;
        System.out.println("第二步,调用set方法设置值");
    }
    public void initMethod(){
        System.out.println("第三部 执行初始化方法");
    }
    public void destoryMethod(){
        System.out.println("第五步 执行销毁的方法");
    }
}


<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
   <bean id="orders" class="com.caq.spring5.bean.Orders" init-method="initMethod" destroy-method="destoryMethod">
       <property name="oname" value="手机"></property>
   </bean>
<!--    配置后置处理器-->
    <bean id="myBeanPost" class="com.caq.spring5.bean.MyBeanPost"></bean>
</beans>


自动装配


  • 什么是自动装配
    (1)根据指定装配规则(属性名称或者属性类型),Spring自动将匹配的属性值进行注入

bean标签属性autowire,配置自动装配autowire属性常用两个值:

byName根据属性名称注入,注入值bean 的id 值和类属性名称一样

byType根据属性类型注入

根据名称就按照id(注入值bean 的id 值和类属性名称一样)

类型就是class后面的


<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!--    实现自动装配-->
<!--    bean标签属性autowire,配置自动装配
        autowire属性常用两个值:
            byName根据属性名称注入  bean的id值和类里的属性一致
            byType根据属性类型注入
-->
    <bean id="emp" class="com.caq.spring5.authwire.Emp" autowire="byType">
<!--        <property name="dept" ref="dept"></property>-->
    </bean>
    <bean id="dept" class="com.caq.spring5.authwire.Dept"></bean>
</beans>



相关文章
|
14天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
6天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
9天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
850 25
|
8天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
587 46
|
2天前
|
监控 BI 数据库
打工人救星!来看看这两家企业如何用Quick BI让业务更高效
Quick BI专业版监控告警助力企业高效运作,通过灵活配置规则与多渠道推送,让数据异常早发现、快响应,推动业务敏捷决策与持续增长。
打工人救星!来看看这两家企业如何用Quick BI让业务更高效
|
8天前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
567 44