spring 核心技术

spring 核心技术
1--控制反转或反向控制 (inversion control IOC)

当一个对象需要另一个对象时, 传统设计过程中, 需要通过调用者来创建被调用着的对象实例
但是在spring中, 创建被调用者的工作不再有调用者来完成,而是由spring IOC容器完成.

DI(dependency injection) 依赖注入
就是组件之间的依赖关系有容器在运行期决定,形象的来说, 就是由容器动态的将某种依赖关系注入到组件中
容器就是 .xml配置文件

通过使用DI,当组件之间关系发生变化时,我们只需要修改系统中相关配置文件,不需要改动代码,这就减少了程序维护量, 又提高了程序的可重用性

2--手动装配
A:Bean工厂

使用org.springframework.beans.factory.BeanFactory接口来获得Bean对象实例
在spring中有很多BeanFactory接口的实现, 但最常用的是org.springframework.beans.factory.xml.XmlBeanFactory,
通过XmlBeanFactory类可以从xml配置文件中读取配置文件中Bean的装配信息, 并在spring容器中建立相应的javaBean对象实例,并返回该实例

要想建立一个XmlBeanFactory对象实例, 需要将配置文件通过FileSystemResource对象传入XmlBeanFactory类的构造器
并通过BeanFactory的getBean方法获取Bean实例
eg:
装配applicationContext.xml文件
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("applicationContext.xml"));
获得被装配的HelloWorld对象实例
HelloWorld helloworld = (HelloWorld)factory.getBean("helloworld");

B:应用上下文(ApplicationContext)

通过org.springframework.context.ApplicationContext接口来装配Bean
在spring中有两种方式实现:
FileSystemXmlApplicationContext:通过绝对或相对路径指定xml配置文件
ClassPathXmlApplicationContext: 从路径中搜索xml配置文件

例:

1--定义一个Bean叫Person, 属性: 姓名, 年龄, 工资. 使用spring IOC容器将各个属性值注入实例中

<bean id="person" class="com.spring.di01.Person">
  <property name="name" value="张三"></property>
  <property name="age" value="11"></property>
  <property name="salary" value="10086"></property>
</bean>

2--Person中增加一个User属性user和user2

<bean id="user" class="com.spring.di01.User">
        <property name="id" value="2"></property>
        <property name="username" value="mary"></property>
        <property name="password">
            <value>123123</value>
        </property>
    </bean>

    <bean id="person" class="com.spring.di01.Person">
        <property name="name" value="张三"></property>
        <property name="age" value="11"></property>
        <property name="salary" value="10086"></property>

        <!-- 外部注入 -->
        <property name="user">
            <ref bean="user"></ref>
        </property>

        <!-- 内部注入 -->
        <property name="user2">
            <bean class="com.spring.di01.User">
                <property name="id" value="22"></property>
                <property name="username" value="mary2"></property>
            </bean>
        </property>
    </bean>
时间: 2024-08-30 09:15:35

spring 核心技术的相关文章

Spring核心技术IoC容器(八)

本文针对自动装载的一些注解进行描述. 基于注解的容器配置 @Required注解 @Required注解需要应用到Bean的属性的setter方法上面,如下面的例子: public class SimpleMovieLister { private MovieFinder movieFinder; @Required public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } //

Spring核心技术

这是第二次看关于Spring的资料,因为刚开始学习Spring的时候是边看视频边学习的,所以更注重的是实现代码,但是对宏观的掌握还是不够,这次主要从宏观的角度来分析一下Spring. 什么是Spring Spring是分层的Java SE/EE应用一站式的轻量级开源框架,以IoC(Inverse of Control:反转控制)和AOP(AspectOriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众

Spring核心技术IoC容器(六)

前文已经描述了Bean的作用域,本文将描述Bean的一些生命周期作用,配置还有Bean的继承. 定制Bean 生命周期回调 开发者通过实现Spring的InitializeingBean和DisposableBean接口,就可以让容器来管理Bean的生命周期.容器会调用afterPropertiesSet()前和destroy()后才会允许Bean在初始化和销毁Bean的时候执行一些操作. JSR-250的@PostConstruct和@PreDestroy注解就是现代Spring应用生命周期回

Spring核心技术IoC容器(五)

前文概述了Spring的容器,Bean,以及依赖的一些信息,本文将描述一下Bean的作用域 Bean的作用域 当开发者定义Bean的时候,同时也会定义了具体如何创建Bean实例的步骤.这些步骤是很重要的,因为只有通过这些配置,开发者才能创建实例对象. 开发者不仅可以控制多种多样的依赖到Bean之中,也可以配置Bean的作用域.这种方法是非常强大而且弹性也非常好,开发者可以通过配置来指定对象的作用域,而不用在Java类层次上来配置.Bean可以配置多种作用域.Spring框架支持5中作用域,有三种

Spring核心技术IoC容器(四)

前面两篇文章描述了IoC容器中依赖的概念,包括依赖注入以及注入细节配置.本文将继续描述玩全部的依赖信息. 使用 depends-on 如果一个Bean是另一个Bean的依赖的话,通常来说这个Bean也就是另一个Bean的属性之一.多数情况下,开发者可以在配置XML元数据的时候使用<ref/>标签.然而,有时Bean之间的依赖关系不是直接关联的.比如:需要调用类的静态实例化器来出发,类似数据库驱动注册.depends-on属性会使明确的强迫依赖的Bean在引用之前就会初始化.下面的例子使用dep

Spring 核心技术(3)

接上篇:Spring 核心技术(2) version 5.1.8.RELEASE 1.4 依赖 典型的企业应用程序不会只包含单个对象(或 Spring 术语中的 bean).即使是最简单的应用程序也是由很多对象进行协同工作,以呈现出最终用户所看到的有条理的应用程序.下一节将介绍如何从定义多个独立的 bean 到实现对象之间相互协作从而实现可达成具体目标的应用程序. 1.4.1 依赖注入 依赖注入(DI)是一钟对象处理方式,通过这个过程,对象只能通过构造函数参数.工厂方法参数或对象实例化后设置的属

Spring 核心技术(4)

接上篇:Spring 核心技术(3) version 5.1.8.RELEASE 1.4.2 依赖关系及配置详情 如上一节所述,你可以将 bean 属性和构造函数参数定义为对其他托管 bean(协作者)的引用,或者作为内联定义的值.Spring 基于 XML 的配置元数据为此目的支持子元素<property/>和<constructor-arg/>. 直接值(基本类型,字符串等) <property/>元素的 value 属性指定一个属性或构造器参数为可读的字符串.Sp

Spring 核心技术(7)

接上篇:Spring 核心技术(6) version 5.1.8.RELEASE 1.6 定制 Bean 的特性 Spring Framework 提供了许多可用于自定义 bean 特性的接口.本节将它们分组如下: 生命周期回调 ApplicationContextAware 和 BeanNameAware 其他 Aware 接口 1.6.1 生命周期回调 要与容器的 bean 生命周期管理进行交互,可以实现 Spring InitializingBean 和 DisposableBean 接口

Spring核心技术(二)——Spring的依赖及其注入

本文将继续前文,描述Spring IoC中的依赖处理. 依赖 一般情况下企业应用不会只有一个对象(或者是Spring Bean).甚至最简单的应用都要多个对象来协同工作来让终端用户看到一个完整的应用的.下一部分将解释开发者如何从仅仅定义单独的Bean,到让这些Bean在一个应用中协同工作. 依赖注入 依赖注入是一个让对象只通过构造参数,工厂方法的参数或者配置的属性来定义他们的依赖的过程.这些依赖也是对象所需要协同工作的对象.容器会在创建Bean的时候注入这些依赖.整个过程完全反转了由Bean自己