详解Java中的Spring框架

详解Java中的Spring框架详解Spring什么是SpringSpring的优点Bean容器Bean的注解Bean属性Bean作用域Bean的生命周期Bean的实例化IoC(InversionofControl)和DI(DedendencyInjection)IoC(控制反转)DI(依赖注入)AOP什么是SpringSpring是分层的JavaSE/EEfull-stack轻量级开源框架,以IoC(InverseofControl,控制反转)和AOP(AspectOrientedProgramming

大家好,又见面了,我是你们的朋友全栈君。

什么是Spring

Spring 是分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)为内核,使用基本的 JavaBean 完成以前只可能由 EJB 完成的工作,取代了 EJB 臃肿和低效的开发模式。

Spring的优点

1)方便解耦,简化开发
2)方便集成各种优秀框架
3)降低 Java EE API 的使用难度
4)方便程序的测试
5)AOP 编程的支持
6)声明式事务的支持

Bean容器

通过容器统一管理对象的生命周期
1)减少对象创建、销毁的步骤,提高了效率;
2)可以统一管理对象之间的依赖关系。

Bean的注解

1)@Component
可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可。
2)@Repository
用于将数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
3)@Service
通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
4)@Controller
通常作用在控制层(如 Struts2 的 Action),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
5)@Autowired
用于对 Bean 的属性变量、属性的 Set 方法及构造函数进行标注,配合对应的注解处理器完成 Bean 的自动配置工作。默认按照 Bean 的类型进行装配。
6)@Resource
其作用与 Autowired 一样。其区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按照 Bean 实例名称进行装配。
7)@Qualifier
与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。

Bean属性

详解Java中的Spring框架

Bean作用域

1)singleton
单例模式,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,这也是 Bean 默认的作用域。
2)prototype
原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例。
3)request
在一次 HTTP 请求中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Request 内有效。
4)session
在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Session 内有效。
5)global Session
在一个全局的 HTTP Session 中,容器会返回该 Bean 的同一个实例。该作用域仅在使用 portlet context 时有效。

Bean的生命周期

1)根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean。

2)利用依赖注入完成 Bean 中所有属性值的配置注入。

3)如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。

4)如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用。

5)如果 Bean 实现了 ApplicationContextAware 接口,则 Spring 调用 setApplicationContext() 方法传入当前 ApplicationContext 实例的引用。

6)如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的预初始化方法 postProcessBeforeInitialzation() 对 Bean 进行加工操作,此处非常重要,Spring 的 AOP 就是利用它实现的。

7)如果 Bean 实现了 InitializingBean 接口,则 Spring 将调用 afterPropertiesSet() 方法。

8)如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。

9)如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的初始化方法 postProcessAfterInitialization()。此时,Bean 已经可以被应用系统使用了。

10)如果在 中指定了该 Bean 的作用范围为 scope=“singleton”,则将该 Bean 放入 Spring IoC 的缓存池中,将触发 Spring 对该 Bean 的生命周期管理;如果在 中指定了该 Bean 的作用范围为 scope=“prototype”,则将该 Bean 交给调用者,调用者管理该 Bean 的生命周期,Spring 不再管理该 Bean。

11)如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean 销毁;如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方法对 Bean 进行销毁。
详解Java中的Spring框架

Bean的实例化

1)构造器实例化
2)静态工厂方式实例化
3)实例工厂方式实例化

IoC(Inversion of Control)和DI(Dedendency Injection)

IoC(控制反转)

bean对象从程序自行管理的方式,转变为Spring容器管理,控制权反转。
优势
对象解耦,容器统一管理bean对象

DI(依赖注入)

  • 属性setter注入
<bean id="duck1" class="frank.model.Duck">
        <property name="name" value="LadyGaga"/>
       <property name="age" value="10"/>
    </bean>
  • 构造方法注入
<bean id="duck2" class="frank.model.Duck">
        <constructor-arg name="name" value="烤鸭" />
        <constructor-arg name="age" value="10" />
    </bean>

AOP

AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
AOP 采取横向抽取机制,取代了传统纵向继承体系的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。
详解Java中的Spring框架

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156580.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月7日 下午9:46
下一篇 2022年7月7日 下午9:46


相关推荐

  • 抖音、吃鸡、王者荣耀:你的自律,是如何被顶级产品经理一步一步毁掉的

    抖音、吃鸡、王者荣耀:你的自律,是如何被顶级产品经理一步一步毁掉的文章概要01你的沉迷跟这个时代有关这是个特别容易沉迷的时代。抖音、煲剧、王者荣耀、吃鸡游戏……你的时间和注意力悄悄被它们偷走,却从不说再见。或许你也纳闷,自己的自制力怎么这么差了?但我想说,这事可能不完全怪你。《欲罢不能:刷屏时代如何摆脱行为上瘾》分享到:你的沉迷跟这个时代有关。作者亚当·奥尔特,是普林斯顿大学的心理学博士。他在这本书里以大量科学研究为基础,揭示了一个细思极恐的真相…

    2022年6月10日
    36
  • OpenClaw卸载命令是什么 OpenClaw CLI删除工具详细教程

    OpenClaw卸载命令是什么 OpenClaw CLI删除工具详细教程

    2026年3月13日
    2
  • 汇编指令与机器码的相互转换(来自80×86汇编小站)「建议收藏」

    汇编指令与机器码的相互转换(来自80×86汇编小站)「建议收藏」作者:HSLY 网站:http://www.x86asm.com E-MAIL:pliceman_110@163.comHI,欢迎进入AssemblyLanguageintoMechineCode教程。首先你得从80×86汇编小站下载下载地址:Soft_Show.asp?SoftID=8  机器语言我们只要重点理解一下几个概念:    1.机器语言指令有

    2022年10月13日
    4
  • gluster存储改变ip段

    gluster存储改变ip段在部署的 gluster 存储中 存储节点 10 1 103 3 nbsp 10 1 103 4 一般节点 10 1 102 710 1 102 810 1 103 210 1 102 1110 1 102 1210 1 102 9 10 1 103 5 10 1 102 6 nbsp 10 1 102 10 节点都是 102 和 103 双 ip 其中 102 是主 ip 103 是存储用 ip 段 由于添加节

    2026年3月16日
    2
  • python编程计算圆面积math_python编程计算圆面积

    python编程计算圆面积math_python编程计算圆面积importmathde banjing mianji math pi banjing banjingretur area r returnpi r rcircle area 1 3 不自定义函数和类 importmath print 圆的面积为

    2026年3月16日
    2
  • 软件测试之用例编写的八大要素「建议收藏」

    软件测试之用例编写的八大要素「建议收藏」用例编写的八大要素1、用例编号:产品名-测试阶段-测试项XXX英文(wechat_st_register_001)2、测试项目:功能模块–子项目3、测试标题:测试点的细化,一行一个测试点4、重要级别P1(冒烟)P2,P3,P4,P5.—-high,medium,low5、预置条件:前提条件,否则无法执行6、测试输入:跟步骤一起7、操作步骤:明确每一个步骤。非常的详细8、预期结果:唯一用例评审用例评审的流程…

    2022年6月28日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号