Spring三个核心技术点

Spring核心技术点有:

IOC(inversion of control)控制反转(反转控制)

生活过中我们要得到或者使用一个东西,往往第一反应就是去找组成这些东西的原材料和工具,比如,我们要喝一杯橙汁,那么我们首先要去找榨汁机,然后去买橙子,和水才能造出橙汁。

这里就要延伸出两个基本概念:正控和反控

正控:若要使用某个对象需要自己去负责对象的创建,比如:User user=new User();

反控:若要使用某个对象只需要从Spring容器中获取需要使用到的对象,不关心对象的创建过程,也就是把创建对象的控制权交给Spriing控制。

DI(Dependency  injection)依赖注入。

还是先说一个场景:假如有一天你口渴了,需要去小卖铺买一瓶水,但是小卖铺距离你家很远。办法一当然很简单,就是你直接去小卖铺买水,去买水之前你必须要知道怎么去小卖铺,还要知道小卖铺有没有你需要的水,去小卖铺是开车还是不行等等。你也许还要考虑很多其他问题才能买到一瓶水,也就是说,为了一瓶水,你需要借助车等其它工具,问题变得相当复杂。

所以,简单的办法就是:小卖铺提供送货上门服务,凡是注册成为小卖铺的会员,都能享受这一服务,你只需要告知小卖铺你需要什么,小卖铺就会及时把货物送上门。

这样一来你就需要做两件事情:第一,向小卖铺注册成为会员。第二,告知小卖铺你需要什么。

这和Spring做法很想,spring就是小卖铺,你就是A对象,水就是B对象。

扫描二维码关注公众号,回复: 8495155 查看本文章

第一,Spring中声明一个类A,

第二,告诉Spring,A需要B

指Spring创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配设置给该对象,实现DI必须有IOC做支持。

<bean name="" class="com.shop.domain.User">

//表四把生日这个对象注入到人这个类中

        <property name="birthday" ref="birthday"/>

</bean>

<bean name="birthday" class="java.util.Date"/>

XML方式实现DI操作

注入方式:set方式注入,构造方法注入,p名称空间注入,spel表达式注入

注入数据类型:基本类型:int,floart ,double ,String;对象类型;复杂类型

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean name="User" class="com.shop.domain.User">
        <!--必须对应的类中可以灭有get方法,但是必须有set方法-->
        <property name="name" value="yly"/>
        <property name="id" value="10"/>
        <property name="myCar" ref="MyCar"/>

    </bean>

    <bean name="MyCar" class="com.shop.domain.Car">
        <property name="carColor" value="黄色"/>
        <property name="carName" value="法拉利"/>
    </bean>
</beans>

然后在User中添加Car对象,并添加set方法。

构造方法创建对象,为什么以上的对象能够被创建,是因为IC默认通过无参构造方法创建对象,可以通过打印无参看看就知道了

但是如果类中没有默认的无参构造方法,比如下面:


    public User(String name,int id){
        this.id=id;
        this.name=name;
    }

那么就要使用下面的方式进行注入:


    <bean name="User" class="com.shop.domain.User">
        <constructor-arg name="name" value="姚"/>
        <constructor-arg name="id" value="10"/>
    </bean>

还可以通过index值来确定优先执行那个构造方法

还可以使用type来控制找那个类型的参数


    <bean name="User" class="com.shop.domain.User">
        <constructor-arg name="name" value="姚" index="1"/>
        <constructor-arg name="id" value="10" index="0" type="java.lang.Integer"/>
    </bean>

 

发布了75 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yaoyaoyao_123/article/details/103705545