Spring初识——IOC 操作 Bean 管理(基于 xml 方式)

简介: 本文简单总结了在Spring5学习初期对IOC操作的理解

什么是bean管理?

- Bean 管理指的是两个操作:

(1)Spring 创建对象

(2)Spirng 注入属性

- Bean 管理操作有两种方式

(1)基于 xml 配置文件方式实现

(2)基于注解方式实现

# 一.基于Xml方式创建对象

```

//定义User类

public class User {  

}

```

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

1. 在 bean 标签有很多属性,介绍常用的属性

     -  id 属性:唯一标识

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

1. 创建对象时候,默认也是执行无参数构造方法完成对象创建

```

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

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

```

# 二.基于 xml 方式注入属性

DI:依赖注入,就是注入属性

###### 1. 第一种注入方式:使用 set 方法进行注入

```

//定义学生类和对应的set方法

private int age;

 

private String name;

 

public class Student {

   public void setAge(int age) {

       this.age = age;

   }

   public void setName(String name) {

       this.name = name;

   }

}

```

在 spring 配置文件进行如下配置

```

<!--使用 property 完成属性注入

name:类里面属性名称

value:向属性注入的值

-->

<bean  id="student" class="com.spring5.Student">

   <property name="age" value="18"></property>

   <property name="name" value="张三"></property>

</bean>

```

###### 2. 第二种注入方式:使用有参数构造进行注入

```

//定义学生类和对应的带参构造方法

public class Student {

   private int age;

   private String name;

   public Student(int age, String name) {

       this.age = age;

       this.name = name;

   }

}

```

在 spring 配置文件进行如下配置

```

<!-- 有参数构造注入属性

使用constructor-arg完成属性注入-->

<bean id="student" class="com.spring5.Student">

   <constructor-arg name="age" value="18"></constructor-arg>

   <constructor-arg name="name" value="李四"></constructor-arg>

</bean>

```

# 三.基于xml 注入其他类型属性

###### 1. 字面量

 (1)null 值

```

<!--null 值-->

<property name="address">

<null/>

</property>

```

 (2)属性值包含特殊符号(使用转义字符或CDATA域实现)

```

<!--属性值包含特殊符号

1 把<>进行转义 < >

2 把带特殊符号内容写到 CDATA

-->

<property name="address">

<value><![CDATA[<<南京>>]]></value>

</property>

```

###### 2.外部bean

(1)创建两个类 service 类和 dao 类

(2)在 service 调用 dao 里面的方法

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

```

//创建Dao接口

public interface UserDao {

}

```

```

//创建Dao接口实现类

public class UserDaoImpl implements  UserDao {

 

}

```

在 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>

```

###### 3.内部bean

```

//员工类

public class Emp {

private  String ename;

private  String gender;

private Dept dept;

   public Dept getDept() {

       return dept;

   }

   public void setDept(Dept dept) {

       this.dept = dept;

   }

   public void setEname(String ename) {

       this.ename = ename;

   }

   public void setGender(String gender) {

       this.gender = gender;

   }

 

}

```

```

//部门类

public class Dept {

   private String dname;

   public void setDname(String dname) {

       this.dname = dname;

   }  

}

```

在 spring 配置文件进行如下配置

```

<bean id="emp" class="com.spring5.bean.Emp">

   <property name="ename" value="张三"></property>

   <property name="gender" value="女"></property>

   <property name="dept" >

       <bean id="dept" class="com.spring5.bean.Dept">

           <property name="dname" value="安保部"></property>

       </bean>

   </property>

</bean>

```

# 四.基于xml 注入集合属性

###### 1. 注入普通属性值

创建Stu类,定义数组、list、map、set 类型属性,生成对应 set 方法

```

public class Stu {

//1 数组类型属性

private String[] courses;

//2 list 集合类型属性

private List<String> list;

//3 map 集合类型属性

private Map<String,String> maps;

//4 set 集合类型属性

private Set<String> sets;

public void setSets(Set<String> sets) {

this.sets = sets;

}

public void setList(List<String> list) {

this.list = list;

}

public void setMaps(Map<String, String> maps) {

this.maps = maps;

}

}

```

在 spring 配置文件进行如下配置

```

<property name="courses">

           <array>

               <value>java课程</value>

               <value>数据库课程</value>

           </array>

       </property>

       <property name="list">

           <list>

               <value>张三</value>

               <value>李四</value>

           </list>

       </property>

       <property name="maps">

           <map>

               <entry key="JAVA" value="java"></entry>

               <entry key="PHP" value="php"></entry>

           </map>

       </property>

        <property name="sets">

        <set>

            <value>mysql</value>

            <value>redis</value>

        </set>

        </property>

   </bean>

</beans>

```

###### 2.在集合里面设置对象类型值

```

//创建Student类

public class Student {

   private List<Course> list;

public void setCourseList(List<Course> courseList) {

   this.courseList = courseList;

}  

   }

```

```

//定义Sources类

public class Course {

   private  String cname;

   public void setCname(String cname) {

       this.cname = cname;

   }

 

```

在 spring 配置文件进行如下配置

```

<!--创建多个 course 对象-->

<bean id="course1" class="com.atguigu.spring5.collectiontype.Course">

<property name="cname" value="Spring5 框架"></property>

</bean>

<bean id="course2" class="com.atguigu.spring5.collectiontype.Course">

<property name="cname" value="MyBatis 框架"></property>

</bean>

<!--注入 list 集合类型,值是对象-->

<property name="courseList">

<list>

<ref bean="course1"></ref>

<ref bean="course2"></ref>

</list>

</property>

```

相关文章
|
10天前
|
XML 安全 Java
|
2月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
114 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
8天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
24 2
|
1月前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
8天前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
17 1
|
2月前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
75 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
1月前
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
2月前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
1月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
35 0
|
2月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
120 1