Spring从入门到精通(三)

SSM三大框架入门到精通(Spring+SpringMVC+MyBatis) 使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下。这次,先说说三大框架整合过程。个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助... 阅读详情

本文将讲解两方面的内容:

1.IOC之BeanFactory与ApplicationContext区别
2.FactoryBean 和 BeanFactory有啥区别

IOC之BeanFactory与ApplicationContext区别

BeanFactory是Spring框架中IoC容器的顶层接⼝,它只是⽤来定义⼀些基础功能,定义⼀些基础规范,⽽ApplicationContext是它的⼀个⼦接⼝,所以ApplicationContext是具备BeanFactory提供的全部功能的。 通常,我们称BeanFactory为SpringIOC的基础容器, ApplicationContext是容器的⾼级接⼝,⽐BeanFactory要拥有更多的功能,⽐如说国际化⽀持和资源访问(xml, java配置类)等等 。

启动 IoC 容器的方式

  • Java环境下启动IoC容器
    • ClassPathXmlApplicationContext:从类的根路径下加载配置⽂件(推荐使⽤)
    • FileSystemXmlApplicationContext:从磁盘路径上加载配置⽂件
    • AnnotationConfigApplicationContext:纯注解模式下启动Spring容器
  • Web环境下启动IoC容器
    • 从xml启动容器
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--配置Spring ioc容器的配置⽂件-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <!--使⽤监听器启动Spring的IOC容器-->
  <listener>
    <listenerclass>
    org.springframework.web.context.ContextLoaderListener
    </listenerclass>
  </listener>
</web-app>

  • 从配置类启动容器
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--告诉ContextloaderListener知道我们使⽤注解的⽅式启动ioc容器-->
  <context-param>
    <param-name>contextClass</param-name>
    <param-value>
   org.springframework.web.context.support.AnnotationConfigWebApplicationContext
    </param-value>
  </context-param>
   <!--配置启动类的全限定类名-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>com.zjq.spring.SpringConfig</param-value>
  </context-param>
  <!--使⽤监听器启动Spring的IOC容器-->
  <listener>
    <listenerclass>
    org.springframework.web.context.ContextLoaderListener
    </listenerclass>
  </listener>
</web-app>

FactoryBean 和 BeanFactory有啥区别

BeanFactory接⼝是容器的顶级接⼝,定义了容器的⼀些基础⾏为,负责⽣产和管理Bean的⼀个⼯⼚,具体使⽤它下⾯的⼦接⼝类型,⽐如ApplicationContext;此处我们重点分析FactoryBean。 Spring中Bean有两种,⼀种是普通Bean,⼀种是⼯⼚Bean(FactoryBean),FactoryBean可以⽣成某⼀个类型的Bean实例(返回给我们),也就是说我们可以借助于它⾃定义Bean的创建过程。 Bean创建的三种⽅式中的静态⽅法和实例化⽅法和FactoryBean作⽤类似,FactoryBean使⽤较多,尤其在Spring框架⼀些组件中会使⽤,还有其他框架和Spring框架整合时使⽤。

// 可以让我们⾃定义Bean的创建过程(完成复杂Bean的定义)
public interface FactoryBean<T> {
    @Nullable
    // 返回FactoryBean创建的Bean实例,如果isSingleton返回true,则该实例会放到Spring容器的单例对象缓存池中Map
    T getObject() throws Exception;
    @Nullable
    // 返回FactoryBean创建的Bean类型
    Class<?> getObjectType();
    // 返回作⽤域是否单例
    default boolean isSingleton() {
        return true;
    }
}

User类

public class User {

    private String name;
    private String addr;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}

UserFactoryBean类

public class UserFactoryBean implements FactoryBean<Company> {
    private String userInfo; // 用户姓名,地址
    public void setUserInfo(String userInfo) {
        this.userInfo = userInfo;
    }
    @Override
    public User getObject() throws Exception {
        // 模拟创建复杂对象User
        User user = new User();
        String[] strings = userInfo.split(",");
        user.setName(strings[0]);
        user.setAddr(strings[1]);
        return user;
    }
    @Override
    public Class<?> getObjectType() {
        return User.class;
    }
    @Override
    public boolean isSingleton() {
        return true;
    }
}

xml配置

<bean id="userBean" class="com.zjq.factory.UserFactoryBean">
  <property name="userInfo" value="詹先生,hangzhou"/>
</bean>

测试,获取FactoryBean产⽣的对象

Object userBean = applicationContext.getBean("userBean");
System.out.println("bean:" + userBean);
// 结果如下
bean:User{name='詹先生', addr='hangzhou'}

测试,获取FactoryBean,需要在id之前添加“&”

Object userBean = applicationContext.getBean("&userBean");
System.out.println("bean:" + userBean);
// 结果如下
bean:com.zjq.factory.UserFactoryBean@65f6cd78

 

Super4PCS文章阅读笔记 Super4PCS阅读笔记 Super4PCS阅读笔记 前言 前言 今天给大家分享一下点云配准四点法4PCS0的变种——Super4PCS。此算法的原文在:Super4PCS: Fast Global Pointcloud Registration via Smart Indexing。稍微我也会写一篇关于如何使用这篇文章的里所提供的代码进行点云粗配准。关于四点法... 阅读详情

相关推荐

数字IC后端时序违例修复:setup/hold冲突与时钟树优化实战

时序收敛是数字IC后端设计中最关键的环节之一,直接影响芯片能否在目标频率下稳定工作。建立时间与保持时间的本质是寄存器对数据稳定性的物理约束,而实际工程中,setup违例和hold违例往往此消彼长,冲突的根源在于数据路径与时钟路径的延迟匹配。时钟树综合(CTS)作为连接逻辑与物理的关键步骤,其skew、insertion delay和transition的优化直接决定了时序修复的成败。通过useful skew技术、合理的单元替换和路径结构调整,可以系统性地解决setup/hold冲突,实现时序收敛。本文结合

weixin_28292761的博客 222

spring两种Ioc容器的对比(BeanFactory和ApplicationContext的比较)

Spring提供两种Ioc容器,分别是BeanFactory和ApplicationContext   BeanFactory:基础类型的Ioc容器,采用懒加载(lazy-load),对象只有在用的时候才初始化和依赖注入。所以启动容器比较快。 ApplicationContext:较高级类型的IOC容器,基于BeanFactory,在启动容器的时候就会初始化并注入依赖。并且还提供其他高级特性...

我是一个有理想的程序员 2148

电子结构设计(EMD)十年知识总结

客官,你的面相是做结构设计的奇才~1. 材料选择【一出手的0.1s就败了】2. 钣金件设计【折来折去有啥难】3. 塑胶件设计【看着好复杂】4. 型材件设计【凭啥不让我设计】5. 电子结构(PCBA)设计【静电肿么要我背锅】6. 包装设计【要的就是金玉其外,败絮其中】7. 外观(工业)设计【好不好看,谁说了算】8. 标签设计【】9. 标准件选择【一个螺丝难倒英雄汉/提起螺丝,英雄气短】10. 计算仿...

wfeng86的博客 1569

BeanFactory和ApplicationContext的区别

BeanFactory和ApplicationContext的区别   描述   BeanFactory: 是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;   ApplicationContext: 应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能; 1) 国际化(Messag...

yjc0403的博客 3030

FPGA编译加速实战:6大可落地的Vivado优化策略

FPGA编译本质上是NP-hard约束满足问题求解,而非传统软件编译;Vivado作为时序驱动的硬件实现工具链,其耗时瓶颈集中在Implementation阶段的布局布线(PnR)与逻辑优化。理解这一原理,才能跳出‘加线程’‘升版本’等表面优化,转向精准时序约束、增量编译、物理锚点控制、IP配置精简等工程级干预。这些技术手段直接作用于Vivado的Tcl执行流与底层求解空间,显著压缩搜索范围、减少无效迭代——尤其适用于Zynq/UltraScale等中大型项目(LUT > 80K、多时钟域、DDR/PCIe

weixin_34226182的博客 413

Vector CANape的使用记录

开门见山,今天想和大家分享下CANape使用记录,分享原因是近日在分析一个客户现场软件问题时,需要用到CANape来实时的监测ECU中的变量,因为之前对CANape的认知比较浅薄,觉得标定工程师使用他就足够了,但是这次的经历让我觉得需要写点东西来记录自己学习并使用他的过程。 相信大家能够在网上找到很多关于如何使用CANape的文章,从新建Project到后面的数据的观测、保存以及回放等等。我个人也是这么学过来的,所以我不打算从那些方面着手去描述如何使用她,而是根据我的真实使用过程以及问题的抛出到如何解决来

2万+

IOC容器之BeanFactory和ApplicationContext

一、BeanFactory容器 1、这是一个最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframewor k.beans.factory.BeanFactor 中被定义。 2、在 Spring 中,有大量对 BeanFactory 接口的实现。其中,最常被使用的是 y XmlBeanFactory 类。这个容器从 一个 XML...

万万 505

YOLO26 多模态融合技术:RGB+红外/深度/雷达融合

YOLO(You Only Look Once)是一种流行的目标检测算法,其最大特点是快速且端到端地完成图像中所有目标的检测与分类任务。YOLO首次在2016年由Joseph Redmon等人提出,彻底改变了传统目标检测(如R-CNN系列)的思路,被广泛应用于自动驾驶、视频监控、工业质检等场景。

一键难忘的博客 3523

BeanFactory和ApplicationContext谁才是Spring IoC容器?

Spring-framework官方文档 简单翻译 在org.springframework.beans和org.springframework.context包是Spring框架的IoC容器的基础。该BeanFactory界面提供了一种高级配置机制,能够管理任何类型的对象「这里提到的是管理对象,不是管理Bean」。ApplicationContext是的子接口BeanFactory。它增加了: 与Spring的AOP功能轻松集成 消息资源处理(用于国际化) 事件发...

码农架构 831

【AI智能体】Claude Code +Superpowers 项目实战操作详解

Claude Code +Superpowers 项目实战操作详解

congge 4049

Langchain cannot connect with Azure SQL Database

Langchain 无法连接到 Azure SQL 数据库

suiusoar 633

【Spring】初次使用IoC,ApplicationContext和BeanFactory的区别

【Spring】初次使用IoC,ApplicationContext和BeanFactory的区别1. 准备spring的jar包以及需要解决的问题程序2. 配置XML文件3. 实现使用spring的IoC解决耦合问题4. ApplicationContext的常用实现类5. ApplicationContext和BeanFactory的区别 1. 准备spring的jar包以及需要解决的问题程序...

来日浅谈的博客 404

数学建模学习(5):最全概率分析之图表绘制详解,内容比较多,建议收藏

(1) 绘制正整数频率使用 tabulate(X) (2)

全栈川川 4593

【Spring从入门到精通】(三)Spring的结构组成

【Spring从入门到精通】(三)Spring的结构组成 (1)beans包的层级结构 阅读源码最好的方式是通过示例跟着操作走一遍,大多数时候可能会被复杂源码绕来绕去,绕到自己不知道身在何处,如果配合UML还是可以搞定的。 我们先来spring-beans包的源码结构 beans包中各个源码的功能如下。 src/main/java用于展现Sprin

559

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring AI Alibaba从入门到精通-01-概述&快速入门【三更草堂】

Spring AI Alibaba是一款基于Spring AI框架、深度集成阿里云百炼平台的AI开发框架,为Java开发者提供ChatBot、工作流和多智能体应用开发能力。它解决了Java生态在AI领域的短板,支持多模态、流式响应、RAG等核心功能,并深度集成阿里云生态,保障企业级安全。该框架具有开箱即用、配置简单、学习成本低等特点,帮助开发者快速构建AI应用,专注业务创新。

sangengcaotang的博客 1310

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring 从入门到精通 (三) 核心API篇

快乐学技术,Spring框架从入门到精通,熊二表示都可以学会。

很高兴你能看到这里 1764

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring 学习 从入门到精通(三)

AOP面向切面编程,一种编程范式,指导开发者如何组织程序结构。

weixin_47485309的博客 397

【Spring Security入门到精通】三、认证机制详解

在上一篇文章中,我们通过实践快速入门了Spring Security的基本配置。今天,我们将深入探讨Spring Security提供的各种认证机制,帮助你根据不同场景选择最适合的认证方式。认证是安全框架的核心功能,回答了"你是谁"的问题。Spring Security提供了丰富的认证机制,从简单的表单登录到复杂的OAuth2/JWT认证,几乎覆盖了所有常见的认证需求。@Component@Override// 获取用户角色// 根据角色重定向到不同页面} else {http。

m0_65382359的博客 475

Spring从入门到精通(三)之AOP

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它用于分离横切关注点(cross-cutting concerns)与主要业务逻辑的模块。横切关注点是那些存在于应用程序各处的功能,如日志记录、事务管理、安全性检查、性能优化等。AOP的主要目标是提高代码的模块化性,降低重复性代码,并提高代码的可维护性。AOP的核心思想是将横切关注点抽象为切面(Aspect),然后将切面与主要业务逻辑代码进行解耦。

qq_42231043的博客 176

Spring Boot核心注解大全:从入门到精通(三)

Spring Boot是一个开源的Java框架,它被设计用来简化Spring应用的创建和开发过程。它基于Spring框架,通过自动配置和约定大于配置的方式,提供了一种快速创建独立的、可部署的Spring应用的方法。本文将跟随《Spring Boot核心注解大全:从入门到精通(二)》的进度,继续介绍Spring Boot核心注解。

凛鼕将至的博客 1574

Spring入门到精通三——SpringBean的配置项及作用域

Bean配置项 Bean的作用域 Bean的生命周期 Bean的自动装配及Aware接口 一、Bean的配置项 Id:这个Bean的唯一标识 class:具体要实例化的那一个类 Scope:范围,作用域 Constructor arguments:构造器的参数(构造器注入) properties:属性(设值注入) Autowiring mode:自动装配的模式 lazy-ini...

于占胜的博客 413

Spring入门到精通<三>Spring访问数据库

Spring在数据访问方面提供了模板化和Dao支持类的提供,方便操作数据库。 一、Spring JDBC (详细配置:http://my.oschina.net/wangning0535/blog/535590?fromerr=MIriquMm) 1、配置数据源 DataSource ...

chuangzhanben4759的博客 153

Spring源码从入门到精通---@Scope&@Lazy(三)

上篇文章主要介绍了@ComponentScan的注解: https://blog.youkuaiyun.com/ke1ying/article/details/118196137?spm=1001.2014.3001.5501 这篇文章主要介绍单例模式,多例模式,懒加载,先上目录结构,这篇文章先创建了beanConfig2文件。 1、多例模式,单例模式 多例模式:@Scope的value指定为prototype,IOC容器初始化完毕之后,获取bean实例的时候加载bean,两次获取的对象实例不是同一个地址值

ke1ying的博客 232

Spring Boot 从入门到精通(三)配置文件

在 Web 开发的过程中,经常需要⾃定义⼀些配置⽂件 在springboot中存在两种配置文件,一种是以.properties结尾的配置文件,另一种是以.yml为结尾的配置文件。 在 application.properties 中配置: xsj.title = 配置文件 xsj.description = 热爱生活,热爱编程 Spring Boot 也⽀持 Yaml 语法书写,⽐如上⾯的配...

程序员世杰 380

Spring Cloud从入门到精通(三):负载均衡 Ribbon

Ribbon Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,封装了Netflix Ribbon实现。Spring Cloud Ribbon (1) 服务的注册与发现

春水上行的博客 772

Spring Boot从入门到精通(三)常用注解含义及用法分析总结

Spring Boot是目前非常流行的框架,而注解是Spring Boot的核心功能,接下来主要说一说Spring Boot常用注解的含义以及部分注解在项目中的使用方法。 一、@RestController和@RequestMapping @RestController被称为一个构造型(stereotype)注解。它为阅读代码的开发人员提供建议。对于Spring来说,该类扮演了一个特殊角色。它继承自@Controller注解。 在Spring4.0之前的版本,Spring MVC的组件都使用.

一个摩羯座的程序猿 246
上一篇: Spring从入门到精通—Spring核心思想之IOC、AOP
下一篇: Java面试通关神器,你想要的我都有
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值