专栏名称: Java知音
专注于Java,推送技术文章,热门开源项目等。致力打造一个有实用,有情怀的Java技术公众号!
目录
相关文章推荐
陈忻儿童心理  ·  《从心理解孩子》课程简单介绍(2025春季班 ... ·  昨天  
人力资源研究  ·  人生建议:下班后,就别再吃上班的苦了...... ·  2 天前  
人力资源研究  ·  人生建议:下班后,就别再吃上班的苦了...... ·  2 天前  
武志红  ·  这一部纪录片,杀我专用小猫刀 ·  3 天前  
51好读  ›  专栏  ›  Java知音

大佬把Spring框架总结的「无比详细」,不信你学不会!

Java知音  · 公众号  ·  · 2020-11-26 09:45

正文

作者:itcats_cn

blog.csdn.net/itcats_cn/article/details/81479185

1、IOC和DI

IOC: 控制反转

即控制权的转移,将我们创建对象的方式反转了,以前对象的创建是由我们开发人员自己维护,包括依赖关系也是自己注入。使用了spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入,反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序创建(spring)

DI:  Dependency Injection  依赖注入

spring这个容器中,替你管理着一系列的类,前提是你需要将这些类交给spring容器进行管理,然后在你需要的时候,不是自己去定义,而是直接向spring容器索取,当spring容器知道你的需求之后,就会去它所管理的组件中进行查找,然后直接给你所需要的组件.

实现IOC思想需要DI做支持

注入方式:

  1. set方式注入
  2. 构造方法注入
  3. 字段注入

注入类型:

  1. 值类型注入
  2. 引用类型注入

好处:

1.降低组件之间的耦合度,实现软件各层之间的解耦.

2.可以使容器提供众多服务如事务管理消息服务处理等等。当我们使用容器管理事务时,开发人员就不需要手工 控制事务,也不需要处理复杂的事务传播

3.容器提供单例模式支持,开发人员不需要自己编写实现代码.

4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能

5.容器提供众多的辅佐类,使这些类可以加快应用的开发.如jdbcTemplate HibernateTemplate

2.applicationContext & BeanFactory区别

BeanFactory接口

(1) spring的原始接口,针对原始接口的实现类功能较为单一

(2)BeanFactory接口实现类的容器,特点是每次在获得对象时才会创建对象

ApplicationContext接口

(1)每次容器启动时就会创建容器中配置的所有对象

(2)提供了更多功能

(3)从类路径下加载配置文件: ClassPathXmlApplicationContext
从硬盘的绝对路径下加载配置文件:FileSystemXmlApplication

3.spring配置详解

3.1、元素属性

  • bean元素:使用该元素描述需要spring容器管理对象
  • name属性:给被管理的对象起个名字,获得对象时getBean("name值")
  • class属性:被管理对象的完整类名
  • id属性:与name属性一模一样,名称不可重复,不能使用特殊字符

name和id之间的一些注意点:

1、配置两个相同的 id 或者 name 都不能通过。

2、如果既配置了 id ,也配置了 name ,则两个都生效。如果id和name都没有指定,则用类全名作为name,如 ,则你可以通过getBean("com.stamen.BeanLifeCycleImpl")返回该实例。

3、如果配置基本类的时候,注解和配置文件都使用的时候,注解和配置文件中 name 相同的时候, 则两个冲突,配置文件生效。

如果配置基本类的时候,注解和配置文件都使用的时候,注解和配置文件中 name 不相同的时候, 则两个不冲突,都能够生效。

扩展: SpringBoot内容聚合

3.2、bean元素进阶(  scope属性   生命周期属性)—————单例多例

(1)scope属性

(1)singleton(默认值)

单例对象:被标识为单例的对象在spring容器中只会存在一个实例

(2)prototype

多例原型:被标识为多例的对象,每次在获得才会被创建,每次创建都是新的对象

(3)request

Web环境下,对象与request生命周期一致

(4)session

Web环境下,对象与session生命周期一致

总结:绝大多数情况下,使用单例singleton(默认值),但是在与struts整合时候,务必要用prototype多例,因为struts2在每次请求都会创建一个新的Action,若为单例,在多请求情况下,每个请求找找spring拿的都是同一个action。

(2)生命周期属性(了解)———初始化和销毁

(1)配置一个方法作为生命周期初始化方法,spring会在对象创建之后立刻调用 init-method

(2)配置一个方法作为生命周期的销毁方法,spring容器在关闭并销毁所有容器中的对象之前调用destory-method
对应注解为@PostConstruct

对应注解为@PreDestory

(3)模块化配置,即分模块配置(导入其他spring配置文件)

  
      

3.3、spring三种对象的创建方式

(1)空参数构造(重要)

(2)静态工厂创建(调用静态方法创建)

调用UserFactory类的静态createUser方法创建名为user的对象,放入容器

"user" class="cn.itcats.UserFactory" factory-method="createUser">

(3)实例工厂创建(调用非静态方法创建)——需要配置两个bean,因为无法通过类名调用非静态方法


"user2" factory-bean="userFactory" factory-method="createUser"






请到「今天看啥」查看全文