Spring——IOC(控制反转)

本文详细介绍了Spring的IOC(控制反转)概念,包括BeanFactory和ApplicationContext两大IOC容器,以及Bean的管理,如对象创建、属性注入。重点讨论了基于XML的配置方式,如set方式、构造函数注入、集合属性注入,并介绍了FactoryBean和Bean的作用域。此外,文章还探讨了注解在Spring中创建对象和属性注入的应用,如@Component、@Autowired、@Qualifier等,以及完全注解开发的实现步骤。
摘要由CSDN通过智能技术生成

标题一、IOC容器

(spring实现了对象池,一些对象创建和使用完毕之后不会被销毁,放进对象池(某种集合)以备下次使用,下次再需要这个对象,不new,直接从池里出去来用。节省时间,节省cpu )
​ 1、什么是IOC(控制反转)

​ a)把对象创建和对象之间的调用过程,交给Spring进行管理

​ b)使用IOC目的:为了降低耦合度

​ 2、IOC底层

​ a)xml解析、工厂模式、反射

​ 3、Spring提供的IOC容器实现的两种方式(两个接口)

​ a)BeanFactory接口:IOC容器基本实现是Spring内部接口的使用接口,不提供给开发人员进行使用(加载配置文件时候不会创建对象,在获取对象时才会创建对象。)

​ b)ApplicationContext接口:BeanFactory接口的子接口,提供更多更强大的功能,提供给开发人员使用(加载配置文件时候就会把在配置文件对象进行创建)推荐使用!

​ 4、ApplicationContext接口的实现类(具体根据API文档查看☺)

标题二、IOC容器-Bean管理

​ 1、IOC操作Bean管理

​ a)Bean管理就是两个操作:(1)Spring创建对象;(2)Spring注入属性

​ 2、基于XML配置文件创建对象

<!--1 配置User对象创建-->
<!--把类实例化放进Spring容器中-->

<bean id="user" class="com.atguigu.spring5.User"></bean>

​ 3、基于XML方式注入属性(DI:依赖注入(注入属性))

​ a)set方式注入

//(1)传统方式: 创建类,定义属性和对应的set方法
public class Book {
   
        //创建属性
        private String bname;

        //创建属性对应的set方法
        public void setBname(String bname) {
   
            this.bname = bname;
        }
   }

<!--2)spring方式: set方法注入属性-->
<bean id="book" class="com.atguigu.spring5.Book">
    <!--使用property完成属性注入
        name:类里面属性名称
        value:向属性注入的值
    -->
    <property name="bname" value="Hello"></property>
    <property name="bauthor" value="World"></property>
</bean>

​ b)有参构造函数注入

//(1)传统方式:创建类,构建有参函数

public class Orders {
   
    //属性
    private String oname;
    private String address;
    //有参数构造
    public Orders(String oname,String address) {
   
        this.oname = oname;
        this.address = address;
    }
  }
<!--2)spring方式:有参数构造注入属性-->
<bean id="orders" class="com.atguigu.spring5.Orders">
    <constructor-arg name="oname" value="Hello"></constructor-arg>
    <constructor-arg name="address" value="China!"></constructor-arg>
</bean>

​ c)p名称空间注入(了解即可)

<!--1、添加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"		<!--在这里添加一行p-->

​ 4、注入空值和特殊符号

<bean id="book" class="com.atguigu.spring5.Book">
    <!--1)null值-->
    <property name="address">
        <null/><!--属性里边添加一个null标签-->
    </property>
    
    <!--2)特殊符号赋值-->
     <!--属性值包含特殊符号
       a 把<>进行转义 &lt; &gt;
       b 把带特殊符号内容写到CDATA
      -->
        <property name="address">
            <value><![CDATA[<<南京>>]]></value>
        </property>
</bean>

​ 5、注入属性-外部bean

​ a)创建两个类service和dao类

public class UserService {
   //service类

    //创建UserDao类型属性,生成set方法
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
   
        this.userDao = userDao;
    }

    public void add() {
   
        System.out.println("service add...............");
        userDao.update();//调用dao方法
    }
}

public class UserDaoImpl implements UserDao {
   //dao类

    @Override
        System.out.println("dao update...........");
    }
}
2

​ b)在spring配置文件中进行配置

<!--1 service和dao对象创建-->
<bean id="userService" class="com.atguigu.spring5.service.UserService">
    <!--注入userDao对象
        name属性:类里面属性名称
        ref属性:创建userDao对象bean标签id值
    -->
    <property name="userDao" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com.atguigu.spring5.dao.UserDaoImpl"></bean>

​ 6、基于XML方式注入内部bean和级联赋值

​ a)注入属性-内部bean

(1)一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门(部门是一,员工是多)
(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示
//部门类
public class Dept {
   
    private String dname;
    public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值