spring(狂神说)-01

1. Spring

1.1 简介

  • 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架。
  • 2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。Rod Johnson创始人,专业是音乐学。
  • Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术
  • ssh : Struct2+Spring+Hibernate
  • SSM:SpringMvc +Spring+Mybatis
    官网 : http://spring.io/
    官方下载地址 : https://repo.spring.io/libs-release-local/org/springframework/spring/
    GitHub : https://github.com/spring-projects

1.2 优点

1、Spring是一个开源免费的框架 , 容器 。
2、Spring是一个轻量级的框架 , 非侵入式的 。
3、控制反转 IoC , 面向切面 Aop。
4、对事物的支持 , 对框架的支持。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。

1.3 扩展

Spring Boot与Spring Cloud
  • springBoot可以快速的开发单个微服务。
  • springCloud 基于springBoot实现的。
    学习springBoot的前提要了解spring和springMVC。

2. IOC创建对象

2.1 对于ioc的理解

控制反转时是一种通过描述(XML或注解)并通过第三方法去生产或获取指定对象的方式。在spring
是实现控制反转的是IOC容器,其方法实现是依赖注入。

在没有IOC的程序中,对象的创建与对象之间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建交给第三方。

2.2 ioc创建对象方式

  • 使用默认的无参构造器创建对象。(默认)
  • 假设使用有参进行创造对象
当删除空参构造后 
<!--    <bean id="user" class="com.wyu.pojo.User">-->
</property>
<!--&lt;!&ndash;     使用有参构造器创建对象 通过下标的方式赋值&ndash;&gt;-->
<!--        <constructor-arg index="0" value="老二"></constructor-arg>-->
<!--    </bean>-->


<!--  第二中方式通过类型进行创建,不建议进行使用,因为构造器只能使用一个参数 -->
<!--    <bean id="user" class="com.wyu.pojo.User">-->
<!--        <constructor-arg type="java.lang.String" value="二胎"></constructor-arg>-->
<!--    </bean>-->

<!--   第三种 直接通过参数命名  -->
    <bean id="user" class="com.wyu.pojo.User">
        <constructor-arg name="name" value="第三种方式命名"></constructor-arg>
    </bean>

在配置文件加载的时候,容器中管理的对象就已经实例化了。

3.Spring配置

3.1 alias

为user对象起另外一个名字 ,一对一的别名
  <alias name="user" alias="user2"></alias>

3.2 bean的配置

<!--bean就是java对象,由Spring创建和管理-->

<!--
   id 是bean的标识符,要唯一,如果没有配置id,name就是默认标识符
   如果配置id,又配置了name,那么name是别名
   name可以设置多个别名,可以用逗号,分号,空格隔开
   如果不配置id和name,可以根据applicationContext.getBean(.class)获取对象;

class是bean的全限定名=包名+类名
-->
<bean id="hello" name="hello2 h2,h3;h4" class="com.kuang.pojo.Hello">
   <property name="name" value="Spring"/>
</bean>

import

将多个applicationContext合并为一个。

4 .依赖注入

依赖注入分为:构造器注入,set注入,扩展方式注入

  • 依赖:bean对象创建依赖于容器。
  • 注入 :bean对象中所有的容器,由容器来注入。

set注入

<bean id="student" class="com.wuyu.pojo.Student">
        <property name="name" value="常量注入 "></property>
        <!--  bean注入,值是对象的引用 ref -->
        <property name="address" ref="address"></property>
        <!-- 数组注入-->
        <property name="books">
            <array>
                <value>数组注入1</value>
                <value>数组注入2</value>
            </array>
        </property>
        <!--列表注入-->
        <property name="games">
            <set>
                <value>LOL</value>
                <value>BOB</value>
                <value>COC</value>
            </set>
        </property>
        <!-- map注入-->
        <property name="card">
            <map>
                <entry key="中国邮政" value="456456456465456"/>
                <entry key="建设" value="1456682255511"/>
            </map>
        </property>
        <!--     字符串 Mnull值注入   -->
        <property name="wife"><null/></property>
        <!--Properties注入 -->
        <property name="info">
            <props>
                <prop key="学号">20190604</prop>
                <prop key="性别"></prop>
                <prop key="姓名">小明</prop>
            </props>
        </property>
    </bean>

扩展方式注入(p,c注入)

P命名空间注入 : 需要在头文件中加入约束文件
导入约束 : xmlns:p="http://www.springframework.org/schema/p"
 
 <!--P(属性: properties)命名空间 , 属性依然要设置set方法--> 用到了默认的构造器 
 <bean id="student2" class="com.wuyu.pojo.Student" p:name="test" />

c 命名空间注入 : 需要在头文件中加入约束文件(要有对应参数的构造器)
 导入约束 : xmlns:c="http://www.springframework.org/schema/c"
 <!--C(构造: Constructor)命名空间 , 属性依然要设置set方法-->
 <bean id="user" class="com.kuang.pojo.User" c:name="test2" />

5.bean的作用域

  • Singleton(spring默认机制):那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象。意,Singleton作用域是Spring中的缺省作用域。要在XML中将bean定义成singleton,可以这样配置:
 <bean id="student" class="com.wuyu.pojo.Student"  scope="singleton">
 Student student = (Student) context.getBean("student");
 Student student1_1 = (Student) context.getBean("student");
 student == student1_1
  • Prototype(每次从容器get的时候获得一个新对象):它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。
  • request , session

6. bean的自动装配

spring会在上下文中自动寻找,并且给bean装配属性。
spring中有三种装配方式:在xml中装配,在java中显示配置,隐式的自动装配bean。

   <bean id="dog" class="com.test.pojo.Dog"/>
   <bean id="cat" class="com.test.pojo.Cat"/>
  byName : 会自动在容器上下文中查找,和自己对象set方法后面对应的beanid。(只要id和set后名字,一致就行)
  byType : 会自动在容器上下文中查找,和自己对象属性相同的beanid。(在bean中只能有相同类型的对象只能有一个)
   <bean id="user" class="com.test.pojo.User" autowire="byName">
       <property name="str" value="test"/>
   </bean>

7. 注解实现自动装配

7.1前提工作 :

  1. 在spring配置文件中引入context文件头
xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd入代码片
  1. 开启属性注解支持!
<context:annotation-config/>
  • @Autowired:需要导入 spring-aop的包!可以写在属性名或者是方法上,使用Autowired可以不写set方法。
//如果允许对象为null,设置required = false,默认为true
@Autowired(required = false)
private Cat cat;
  • @Qualifier : 当自动装配环境复杂时,无法通过一个注解(Autowited)匹配的时候,可以使用Qualifier 指定一个唯一的beanid辅助查找。
  • @Resource :指定唯一的bean时候用name =" "。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值