目录

  • 一、spring 基于 xml 的 IOC 环境搭建和入门

    • 1.pom.xml
    • 2.类
    • 3. bean.xml
    • 4.主函数
    • 5.总结
  • 二、BeanFactory和ApplicationContext的区别
  • 三、spring 中 bean 的细节之三种创建 Bean 对象的方式
    • 1. 第一种方式:使用默认构造函数创建。
    • 2.第二种方式:
    • 3.第三种方式:
  • 四、spring中bean的细节之作用范围
    • 1.bean标签订单scope属性:
    • 2.bean 对象的生命周期
      • Ⅰ单例对象
      • Ⅱ多例对象

一、spring 基于 xml 的 IOC 环境搭建和入门

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>spring02</groupId><artifactId>spring02</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency></dependencies></project>

2.类

将上次的耦合和解耦的笔记放进去

3. 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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--把对象的创建交给 spring 来管理--><bean id="accountService" class="com.service.impl.AccountServiceImpl"/><bean id="accountDao" class="com.dao.impl.AccountDaoImpl"/>
</beans>

4.主函数

public class Client {/*** 获取 spring 的 ioc 核心容器,并根据 id 获取对象* @param args*/public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService accountService=(IAccountService)ac.getBean("accountService");IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);System.out.println(accountService);System.out.println(accountDao);}
}

5.总结

ApplicationContext的三个常用实现类:

  1. ClassPathXmlApplicationContext:他可以加载类路径下的配置文件,要求配置文件必须在类路径下,不在的话,加载不了。

  2. FileSystemXmlApplicationContext:他可以加载磁盘任意路劲下的配置文件(必须有访问权限)
  3. AnnotationConfigApplicationContext:它是用于读取注解创建容器的。

获取配置文件对应实现类有两种方法:

  1. 强制转换

    • IAccountService accountService=(IAccountService)ac.getBean("accountService");
  2. IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);

二、BeanFactory和ApplicationContext的区别

    public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService accountService=(IAccountService)ac.getBean("accountService");IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);System.out.println(accountService);System.out.println(accountDao);/*-------BeanFactory-------------*/Resource resource=new ClassPathResource("bean.xml");BeanFactory beanFactory=new XmlBeanFactory(resource);IAccountService as=(IAccountService)beanFactory.getBean("accountService");System.out.println(as);}
}

核心容器接口两个引发出的问题:

  1. ApplicationContext: (单例对象适用)

    他在创建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说,只要一读完配置文件马上就创建配置文件的对象。

  2. BeanFactory: (多例对象适用)

    他在创建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据 id 获取对象了,什么时候才真正的创建对象。

三、spring 中 bean 的细节之三种创建 Bean 对象的方式

1. 第一种方式:使用默认构造函数创建。

  • 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。 采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建
<bean id="accountService" class="com.service.impl.AccountServiceImpl"/>
<bean id="accountDao" class="com.dao.impl.AccountDaoImpl"/>

2.第二种方式:

  • 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)
package com.factory;import com.service.IAccountService;
import com.service.impl.AccountServiceImpl;/*
模拟一个工厂类(该类可能存在于jar包中,我们无法通过修改源码的方式来提供默认构造函数)
*/
public class InstanceFactory {public IAccountService getAccountService(){return new AccountServiceImpl();}
}
<bean id="instanceFactory" class="com.factory.InstanceFactory"/>
<bean id="accountService2" factory-bean="instanceFactory" factory-method="getAccountService"/>

3.第三种方式:

  • 使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
package com.factory;import com.service.IAccountService;
import com.service.impl.AccountServiceImpl;/*
模拟一个工厂类(该类可能存在于jar包中,我们无法通过修改源码的方式来提供默认构造函数)
*/
public class StaticFactory {public static IAccountService getAccountService(){return new AccountServiceImpl();}
}
<bean id="accountService3" class="com.factory.StaticFactory" factory-method="getAccountService"/>

四、spring中bean的细节之作用范围

bean 的作用范围调整

1.bean标签订单scope属性:

作用:用于指定bean作用范围 取值:常用的就是单例的于多例的

  1. singleton:单例的(默认值)

  2. prototype:多例的

  3. request:作用与web应用的请求范围

  4. session:作用于web应用的会话范围

  5. global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session

对于 global-session 的理解

global session 可以理解为全局 session

2.bean 对象的生命周期

Ⅰ单例对象

  1. 出生:当容器创建时对象出生

  2. 活着:只要容器还在,对象一直活着

  3. 死亡:单例对象的生命周期和容器相同多例对象

实现类

public class AccountServiceImpl implements IAccountService {private IAccountDao accountDao=new AccountDaoImpl();public void saveAccount() {accountDao.saveAccount();}public void init(){System.out.println("对象初始化");}public void destroy(){System.out.println("对象销毁");}
}

xml 文件

    <bean id="accountService" class="com.service.impl.AccountServiceImpl" scope="singleton"init-method="init" destroy-method="destroy"/><bean id="accountDao" class="com.dao.impl.AccountDaoImpl"/>

主函数

public class Client {public static void main(String[] args) {ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService as=ac.getBean("accountService",IAccountService.class);as.saveAccount();ac.close();}
}

运行结果

对象初始化
保存成功
对象销毁

Ⅱ多例对象

  1. 出生:当我们使用时 spring 框架为我们创建

  2. 活着:对象只要是在使用过程中就一直活着

  3. 死亡:当对象长时间不用,且没有别的对象引用时,由Java的垃圾回收器回收

转载于:https://www.cnblogs.com/zuiren/p/11415413.html

03-spring bean相关推荐

  1. 学妹问的Spring Bean常用配置,我用最通俗易懂的讲解让她学会了

    你好呀,我是沉默王二,一枚有趣的程序员,写的文章一直充满灵气,力求清新脱俗.昨天跑去王府井的小米店订购了一台小米 10,说是一周之内能到货,但我还是忍不住今天就想见到她.见我茶不思饭不想的,老婆就劝我 ...

  2. spring Bean自动装配

    spring Bean自动装配 自动装配是使用spring满足bean依赖的一种方式. spring会在应用上下文中为某个bean寻找其依赖的bean. spring自动装配需要从两个角度来实现,或者 ...

  3. Spring Bean 中的线程安全

    在 使用Spring框架时,很多时候不知道或者忽视了多线程的问题.因为写程序时,或做单元测试时,很难有机会碰到多线程的问题,因为没有那么容易模拟多线 程测试的环境.但如果不去考虑潜在的漏洞,它就会变成 ...

  4. Spring Bean配置方式之一:Java配置

    简介: Spring bean 是使用传统的 XML 方法配置的.在这篇文章中,您将学习使用基于纯 Java 的配置而非 XML 来编写 Spring bean 并配置它们.本文将介绍可用来配置 be ...

  5. Spring bean 实现生命周期的三种解决方案

    Spring bean 实现生命周期的三种解决方案 参考文章: (1)Spring bean 实现生命周期的三种解决方案 (2)https://www.cnblogs.com/javawebsoa/a ...

  6. Spring ----Bean的生命周期

    这Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理, 一般担当管理者角色的是BeanFactory或ApplicationConte ...

  7. 【Spring实战】注入非Spring Bean对象

    2019独角兽企业重金招聘Python工程师标准>>> 大家经常用到Spring IOC去管理对象之间的依赖关系,但一般情况下都有一个前提:这些Bean对象必须是通过Spring容器 ...

  8. spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停地来唤醒记忆深处的知识点. Q1.什么是Spring框架? Spring是最流行的企业应用程序框架之一.Spring ...

  9. 【一步一步学习spring】spring bean管理(上)

    1. spring 工厂类 我们前边的demo中用到的spring 工厂类是ClassPathXmlApplicationContext,从上图可以看到他还有一个兄弟类FileSystemApplic ...

  10. Spring bean加载多个配置文件

    在一个大的项目结构,Spring bean配置文件位于不同的文件夹以便于维护和模块化.例如,Spring-Common.xml在common 文件夹中,Spring-Connection.xml 在c ...

最新文章

  1. python中outside loop_Python: 'break' outside loop
  2. 你必须会的启发式搜索算法--A*算法
  3. java程序的运行结果依赖操作系统吗_java模拟试卷及答案及解析4
  4. Maven中的dependencyManagement 意义
  5. [驱动注册]platform_driver_register()与platform_device_register()
  6. 【python图像处理】图像的读取、显示与保存
  7. 构造函数= default;_Python Collections之defaultdict 和 default_factory关系
  8. hadoop hive集群_基于伪分布式Hadoop搭建Hive平台详细教程
  9. mysql复制学习二 安装及首次复制配置
  10. TypeError: 'float' object is not iterable
  11. [转]细说Redis监控和告警
  12. JS学习总结(14)——Events事件
  13. CodeBlock调试(DeBug)指南
  14. 点云配准(四) 四元数与旋转变换
  15. 晶体二极管及其基本应用电路
  16. thinkphp 3.2引入第三方类
  17. 遍历vad二叉树来遍历进程里的模块
  18. 小红书java算法难吗_Java面试系列之记一次小红书之旅
  19. 使用Android拨打电话功能
  20. 某游戏客户流失情况数据分析

热门文章

  1. ecshop 删除订单时提示“以下订单无法被移除”的解决办法
  2. [转载] 七龙珠第一部——第092话 孙悟空上场了
  3. 黑马程序员-面向对象-06天-3(static-静态代码块)
  4. CSS选择器(转载)
  5. jquery 选项卡插件
  6. js中的异常处理try...catch使用介绍
  7. 利用getLayoutParams()方法和setLayoutParams()方法
  8. android LayoutInflater.inflate()的参数及其用法
  9. Float构建三栏DIV CSS网页布局
  10. C语言中不安全的函数