Spring框架学习—IOC

标题:Spring框架学习—IOC

学习内容:

1、Spring框架基本概述以及IOC基本概述
2、IOC底层原理
3、基于XML方式的bean管理
4、基于注解的bean管理
5、IOC内容的补充


内容详情:

1、Spring框架基本概述以及IOC基本概述
Spring框架基本概述

1、Spring是轻量级的开源的JavaEE框架’
2、Spring:可以解决企业应用开发的复杂性。
3、Spring有两个核心部分:IOC和 Aop
(1)IOC:控制反转,把创建对象过程交给Spring进行管理
(2) Aop:面向切面,不修改源代码进行功能增强。
4、Spring特点
(1)方便解耦,简化开发
(2)Aop编程支持;
(3)方便程序测试
(4)方便和其他框架进行整合
(5)方便进行事务操作
(6)降低API开发难度;

什么是IOC

控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理

使用IOC目的:

为了耦合度降低


2、IOC底层原理
xml解析、工厂模式、反射
在这里插入图片描述
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
Spring提供IOC容器实现两种方式:(两个接口),

BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用,加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用,加载配置文件时候就会把在配置文件对象进行创建

3、基于XML方式的bean管理

3.1.创建对象

在spring配置文件中,使用bean标签,标签里面添加对应属性
*id属性:唯一标识;
*class属性:类全路径〔包类路径)
创建对象时候,默认是执行无参数构造方法完成对象创建

<bean id="book" class="jr.xiaobai.Book" > </bean>

3.2.属性注入之set注入,以及set注入—p名称空间注入

set注入

 <bean id="book" class="jr.xiaobai.Book">
        <property name="id" value="1"></property>
        <property name="name" value="哈哈哈"></property>
        <property name="num" value="2"></property>
    </bean>

p名称空间注入

首先在上面写下
xmlns:p=“http://www.springframework.org/schema/p”
然后通过P:属性注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="book" class="jr.xiaobai.Book" p:id="3" p:name="数据库"  p:num="20" >

    </bean>

3.3.带参数的构造注入

<bean id="user" class="jr.xiaobai.User">
    <constructor-arg name="age" value="18"></constructor-arg>
    <constructor-arg name="username" value="小白"></constructor-arg>
    <constructor-arg name="id" value="1"></constructor-arg>
</bean>

3.4. 注入空值以及 注入特殊符号

        <bean class="jr.xiaobai.User" id="user">
<!--            注入空值-->
            <property name="username">
                <null/>
            </property>
<!--            注入特殊符号<<湖南>>-->
            <property name="id">
                <value><![CDATA[<<湖南>>]]></value>
            </property>
        </bean>

3.5. 外部bean的注入

<!--     外部bean的注入  获取别的bean类的对象,这个bean类里面定义一个别的对象作为属性-->
        <bean id="userDaolmpl" class="jr.dao.UserDaolmpl"></bean>
        <bean class="jr.service.UserService" id="userService">
            <property name="userDaolmpl" ref="userDaolmpl">

            </property>
        </bean>

这段代码就在UserService类里面,注入了UserDaolmpl类的一个对象,就可以使用这个对象操作了

3.6.内部bean的注入以及级联赋值

    <!--内部bean的注入   -->
<!--    <bean class="jr.bean.Emp" id="emp">-->
<!--        <property name="ename" value="xiaobai"></property>-->

<!--        <property name="dept">-->
<!--            <bean class="jr.bean.Dept" id="dept">-->
<!--                <property name="dname" value="咸鱼部"></property>-->
<!--            </bean>-->
<!--        </property>-->

        <!-- 级联赋值-->
    <bean class="jr.bean.Dept" id="dept">
        <property name="dname" value="技术部"></property>
    </bean>
    <bean class="jr.bean.Emp" id="emp">
        <property name="ename" value="xiaobai"></property>
        <property name="dept" ref="dept"></property>
    </bean>

一对多的关系,比如一个员工属于一个部门,一个部门有很多员工,员工类用部门类的部门名作为属性时,需要获取部门类的对象,并且为其赋值

3.7.给数组、list、map、set集合赋值

    <!--给数组、list、map、set集合赋值-->
    <bean class="jr.xiaobai.Stu" id="stu">
      <property name="arr">
          <list>
              <value>hhh</value>
          </list>
      </property>
        <property name="list">
            <list>
                <value>知道</value>
                <value>了吗</value>
            </list>
        </property>

        <property name="maps">
           <map>
               <entry key="hello" value="你好"></entry>
               <entry key="no" value="不"></entry>
           </map>
        </property>
        <property name="sets">
            <set>
                <value>知道</value>
                <value>你会了</value>
            </set>
        </property>

    </bean>

3.8. 集合中放的对象的赋值

<!-- 集合中放的对象的赋值-->
    <bean class="jr.xiaobai.Stu" id="stu">
        <property name="list1">
            <list>
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
            </list>
        </property>
    </bean>

    <bean class="jr.xiaobai.Course" id="course1">
        <property name="cname" value="haha"></property>
    </bean>
    <bean class="jr.xiaobai.Course" id="course2">
        <property name="cname" value="hahahhh"></property>
    </bean>

3.9.把集合抽取出来供公共使用

<!--    把集合抽取出来供公共使用-->
        <util:list id="Peoplelist">
            <value>aa</value>
            <value>le</value>
            <value>Wu</value>
        </util:list>
        <bean class="jr.xiaobai.People" id="people">
            <property name="list" ref="Peoplelist"></property>
        </bean>

4、基于注解的bean管理

4.1.Bean管理中创建对象注解

@Component :普通类
@Service ;service层
@Controller :web层
@Repository ;dao层

规范的话就按照上面的用,其实效果都一样4个注解,都可以随便用,但规范的话就按照上面的标准。

用法:很简单,用在哪个类就放哪个类上面
但要开启注解扫描
在这里插入图片描述

<!--    开启组件扫描-->
        <context:component-scan base-package="jr"></context:component-scan>

4.2.基于注解方式实现属性注入

@Autowired:根据属性类型进行自动装配
@Qualifier:根据属性名称进行注入
@Resource:可以根据类型注入,可以根据名称注入
@Value:注入普通类型属性

Qualifier要跟Autowired一起使用,Resource不是Spring提供的,是java扩展类提供的。

基于注解很简单,注解写在属性上面,特殊需要的话,注解后面跟个value=。

5、IOC内容的补充


5.1.测试代码的补充
之前都是配置文件的代码,这里补充一个通用的测试类代码

//加Spring配置文件,两种方式对应不同的路径
        ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext("bean2.xml");
        ApplicationContext context = new FileSystemXmlApplicationContext("C:\\ideacode\\IOC\\src\\bean1.xml");
        //加载配置的对象
        Book book = context.getBean("book", Book.class);
        Book book1 = context1.getBean("book", Book.class);

5.2.简要介绍Spring有两种类型 bean

Spring有两种类型 bean:

普通bean:在配置文件中定义bean类型就是返回类型
工厂bean (FactoryBean) :在配置文件定义bean类型可以和返回类型不一样

5.3.bean的作用域

在spring配置文件 bean标签里面有属性(scope)用于设置单实例还是多实例
scope属性值 第一个值默认值singleton,表示是单实例对象
第二个值prototype,表示是多实例对象
singleton和prototype区别
singleton单实例,prototype多实例
设置scope值是singleton时候,加载spring配置文件时候就会创建单实例对象 设置 scope值是
prototype时候,不是在加载spring 配置文件时候创建对象,在调用getBean方法时候创建多实例对象s

5.4.bean的生命周期

生命周期

从对象创建到对象销毁的过程

bean生命周期

1.通过构造器创建bean实例(无参数构造)
2.为bean的属性设置值和对其他bean引用(调用set方法)
3.调用bean的初始化的方法(需要进行配置初始化的方法))
4.bean可以使用了(对象获取到了)
5.当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

添加后置处理器之后
就有7步了
在第三步的前后添加了把bean实例传递bean后置处理器的方法

5.5.bean基于xml方式的自动装配
实现自动装配

bean标签属性autowire
配置自动装配autowire属性常用两个值:
byName根据属性名称注入,注入值bean的id值和类属性名称一样
byType根据属性类型注入

5.6.引入外部属性文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.6.开启组件扫描的筛选配置
在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值