Spring总结一:IOC

Spring概述

①Spring是一个开源框架

②Spring为简化企业级开发而生,使用Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能。同样的功能,在EJB中要通过繁琐的配置和复杂的代码才能够实现,而在Spring中却非常的优雅和简洁。

③Spring是一个IOC(DI)和AOP容器框架。

④Spring的优良特性

[1]非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API

[2]依赖注入:DI——Dependency Injection,反转控制(IOC)最经典的实现。

[3]面向切面编程:Aspect Oriented Programming——AOP

[4]容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期

        [5]组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。

        [6]一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)。

Spring三大核心思想

①控制反转(IOC)

     由spring来负责控制对象的生命周期和对象间的关系。所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转(IOC)。
 

② 属性注入(DI)

IOC的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。简单理解就是对象的属性由Spring通过一定的方式进行赋值。

③面向切面(AOP)

●AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充。

●AOP编程操作的主要对象是切面(aspect),而切面模块化横切关注点

●在应用AOP编程时,仍然需要定义公共功能,但可以明确的定义这个功能应用在哪里,以什么方式应用,并且不必修改受影响的类。这样一来横切关注点就被模块化到特殊的类里——这样的类我们通常称之为“切面”。

SpringIOC

IoC 容器的接口设计图

整个 Spring IoC 容器就是以 BeanFactory 和 ApplicationContext 作为核心的

(1)BeanFactory:IOC容器的基本实现,是Spring内部的基础设施。

在3.1之前可以使用“XmlBeanFactory”,但是在3.2版本之后不建议使用了。转而建议使用“XmlBeanFactory”的父类“DefaultListableBeanFactory”.以及“XmlBeanDefinitionReader”。

定义好Spring的配置文件
通过Resource对象将Spring配置文件进行抽象,抽象成一个Resource对象。
定义好Bean工厂(各种BeanFactory)
定义好XmlBeanXmlBeanDefinitionReader对象,并将工厂作为参数传递进去供后续回调使用。
通过XmlBeanBefinitionReader对象读取之前抽象出来的Resource对象(包含了XML文件的解析过程)。
IOC容器创建完毕,用户可以通过容器获取到所需的对象信息。

        ClassPathResource res = new ClassPathResource("applicationConText.xml") ;
        DefaultListableBeanFactory factory = new DefaultListableBeanFactory() ;
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory) ;
        reader.loadBeanDefinitions(res) ;
        User user = (User) factory.getBean("user");
        System.out.println(user);

 

 

(2)ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。

BeanFactory     :采取延迟加载,是在第一次getBean的时候才会生成类的实例.

ApplicationContext  :在加载applicationContext.xml时候就会创建.

ApplicationContext是对BeanFactory的扩展,提供了更多功能

a. 国际化支持
b. 资源访问:Resource rs = ctx. getResource(“classpath:config.properties”), “file:c:/config.properties”
c. 事件传递:通过实现ApplicationContextAware接口

IoC容器的实现

常用的获取ApplicationContext

①FileSystemXmlApplicationContext

    classpath:前缀是不需要的,默认就是指项目路径下面;
    如果要使用绝对路径,file:前缀可有可无,不影响

②ClassPathXmlApplicationContext

     没有盘符的是项目工作路径,即项目的根目录; 
     如果要使用绝对路径,需要加上file:前缀表示这是绝对路径;

        ApplicationContext applicationContext = new FileSystemXmlApplicationContext("src/applicationContext.xml");
        ApplicationContext applicationContext1 = new FileSystemXmlApplicationContext("file:D:\\applicationContext.xml");
        User user = (User) applicationContext.getBean("user");
        User user1 = (User) applicationContext1.getBean("user");
        ApplicationContext applicationContext2 = new ClassPathXmlApplicationContext("applicationConText.xml");
        User user2 = (User) applicationContext2.getBean("user");
        ApplicationContext applicationContext3 = new ClassPathXmlApplicationContext("file:D:\\applicationConText.xml");
        User user3 = (User) applicationContext3.getBean("user");

        System.out.println(user);
        System.out.println(user1);
        System.out.println(user2);
        System.out.println(user3);

spring5.1.0中测试

Spring IoC容器初始化过程

spring所需jar包详解

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值