Spring-IOC-xml方式

简介

**控制反转**(Inversion of Control,缩写为**IoC**),是[面向对象编程]中的一种设计原则,可以用来减低计算机[代码]之间的[耦合度]。其中最常见的方式叫做[依赖注入]Dependency Injection,简称DI),还有一种方式叫"依赖查找"(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

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

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

上面的入门案例 就是IOC实现

底层原理

使用xml 解析,工厂模式,反射
IOC接口 (BeanFactory)

IOC思想基于IOC容器完成,IOC容器底层就是工厂对象

Spring提供IOC容器实现两种方式 (2个接口)

(1)BeanFactory: IOC 容器基本实现,是spring内部的使用接口,不提供开发人员进行使用

加载配置文件时,不会创建对象,在获取(使用)对象时,才去创建对象

(2)ApplicationContext:ApplicationContext是BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用,

加载配置文件时候就会把 配置文件中配置的对象进行创建

IOC操作Bean管理

  1. 什么是bean管理

bean管理指的是两个操作:

a. spring 创建对象

b. spring 注入属性

  1. Bean管理操作有2种方式

a 基于xml方式

b.基于注解方式

基于xml方式创建对象

(1)在spring配置文件种,使用bean标签,标签里面添加对应的属性,就可以实现对象创建

(2)bean标签常用属性

id属性: 唯一标识

class属性:类全路径 (包类路径)

(3)创建对象时候,默认执行无参构造方法,完成对象的创建

<!--配置User对象创建-->

<bean id="user" class="com.ly.User">

基于xml方式注入属性

(1)DI: 依赖注入, 就是注入属性

第一种子 注入方式: 使用set方法进行注入

(a) 创建类,定义属性和setter

java 复制代码
 package com.ly;
 ​
 public class Book {
 ​
    //创建属性
     private String bName;
     private String author;
 ​
     public void setbName(String bName) {
         this.bName = bName;
     }
     public void setAuthor(String author) {
         this.author = author;
     }
     public void print(){
         System.out.println(bName+","+author);
     }
 }
复制代码
 ​

(b) 在spring配置文件中 ,配置对象及属性

XML 复制代码
<!--使用set 方法注入属性-->
    <bean id="book" class="com.ly.Book">
        <!--使用property完成属性注入
           name:类里面属性名称
           value:向属性注入的值
        -->
        <property name="author" value="王丽丽"></property>
        <property name="bName" value="李四"></property>
    </bean>

(c)测试

复制代码
  
java 复制代码
@Test
     public void tesBook(){
         //1. 加载spring配置文件
         ApplicationContext context = new ClassPathXmlApplicationContext("demo1.xml");
         //2.获取 配置创建的对象
         Book book = context.getBean("book", Book.class);
         book.print();
     }
 ​
复制代码
 控制台输出:
 李四,王丽丽

有参构造方法进行注入

(a) 创建类,定义属性,生成带参构造方法

复制代码
 
java 复制代码
package com.ly;
 // 使用 有参构造注入
 public class Order {
     private String oName;
     private String address;
 ​
    
     public Order(String oName, String address) {
         this.oName = oName;
         this.address = address;
     }
       //为了测试 结果 添加的
      public void print(){
         System.out.println(oName+"::"+address);
     }
 }

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

XML 复制代码
 <!--使用 带参构造方式注入-->
     <bean id="order" class="com.ly.Order">
         <constructor-arg name="address" value="天津市"></constructor-arg>
         <constructor-arg name="oName" value="玩具车"></constructor-arg>
     </bean>

(c) 测试

复制代码
 
java 复制代码
 @Test
     public void tesOrder(){
         //1. 加载spring配置文件
         ApplicationContext context = new ClassPathXmlApplicationContext("demo1.xml");
         //2.获取 配置创建的对象
         Order order = context.getBean("order", Order.class);
         order.print();
     }
复制代码
 ​
 ​
 控制台输出 :
 玩具车::天津市

p命名空间注入

(1)使用p命名空间注入, 可以简化基于xml配置方式

a. 添加p命名空间 xmlns:p="http://www.springframework.org/schema/p"

XML 复制代码
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:p="http://www.springframework.org/schema/p"     
        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">
复制代码
 ​

b.进行属性注入,在bean标签里面进行操作

XML 复制代码
 <bean id="book" class="com.ly.Book" p:author="李四" p:bName="html"></bean>

基于xml注入其他类型属性

1.字面量(固定值)

a. null值 ---<null/> 标签

XML 复制代码
<bean id="book" class="com.ly.Book">
 ​
         <property name="author" value="王丽丽"></property>
         <property name="bName" value="李四"></property>
         <!--address 值为 null 空值-->
         <property name="address">
             <null/>
         </property>
     </bean>
复制代码
b.属性值包含特殊符号
复制代码
 使用转义 
XML 复制代码
<property name="address" value="&lt;南京&gt;"></property>
复制代码
 或者cdata
 
XML 复制代码
 <property name="address">
        <value><![CDATA[<南京>]]></value>
  </property>
 ​
复制代码
 控制台输出
 李四,王丽丽,<南京>
相关推荐
Yaml41 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~1 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616881 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7892 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java2 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~2 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
程序媛小果3 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot
小屁孩大帅-杨一凡3 小时前
java后端请求想接收多个对象入参的数据
java·开发语言
java1234_小锋3 小时前
使用 RabbitMQ 有什么好处?
java·开发语言
TangKenny3 小时前
计算网络信号
java·算法·华为