Spring5入门-----IOC 操作 Bean 管理(1)----Spring5的@Test注解引入

本文详细介绍了Spring5中的IOC操作Bean管理,包括XML注入其他类型属性、集合属性、FactoryBean的使用,以及@Test注解的引入。内容涵盖了bean的作用域设置,如singleton和prototype的区别,以及如何通过xml配置进行各种类型的属性注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


IOC 操作 Bean 管理


IOC 操作 Bean 管理(xml 注入其他类型属性)

1、字面量

(1)null 值

<!--null-->
<property name="address">
 <null/>
</property>

(2)属性值包含特殊符号

<!--属性值包含特殊符号
 1<>进行转义 &lt; &gt;
 2 把带特殊符号内容写到 CDATA
-->
<property name="address">
 <value><![CDATA[<<南京>>]]></value>
</property>

2、注入属性-外部 bean

(1)创建两个类 service 类和 dao 类
(2)在 service 调用 dao 里面的方法 (

public class UserService {
 //创建 UserDao 类型属性,生成 set 方法
 private UserDao userDao;
 public void setUserDao(UserDao userDao) {
 this.userDao = userDao;
 }
 public void add() {
 System.out.println("service add...............");
 userDao.update();
 }
}

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

    <!--注入userDao对象  name属性: 类里属性名称   ref属性:创建userDao对象bean标签id值 -->
   <property name="userDao" ref="userDaoIml"></property>
    </bean>
    <!--接口实现类-->
    <bean id="userDaoIml" class="com.NS.spring5.dao.UserDaoIml"></bean>

3、注入属性-内部 bean

(1)一对多关系:部门和员工 一个部门有多个员工,一个员工属于一个部门 部门是一,员工是多。
(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示

//部门类
public class Dept {
 private String dname;
 public void setDname(String dname) {
 this.dname = dname;
 }
}
//员工类
public class Emp {
 private String ename;
 private String gender;
 //员工属于某一个部门,使用对象形式表示
 private Dept 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;
 }
 }

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

    <bean id="emp" class="com.NS.spring5.bean.Emp">
    <property name="ename" value="tom"></property>
    <property name="gender" value="女"></property>
    <!--设置对象类型属性-->
    <property name="dept">
    <bean id="dept" class="com.NS.spring5.bean.Dept">
        <property name="dname" value="保安部"</property>
    </bean>
    </property>
</bean>

4、注入属性-级联赋值
(1)第一种写法

<!--级联赋值-->
<bean id="emp" class="com.NS.spring5.bean.Emp">
 <!--设置两个普通属性-->
 <property name="ename" value="lucy"></property>
 <property name="gender" value="女"></property>
 <!--级联赋值-->
 <property name="dept" ref="dept"></property>
</bean>

<bean id="dept" class="com.NS.spring5.bean.Dept">
 <property name="dname" value="财务部"></property>
</bean>

(2)第二种写法

<!--级联赋值-->
<bean id="emp" class="com.NS.spring5.bean.Emp">
 <!--设置两个普通属性-->
 <property name="ename" value="lucy"></property>
 <property name="gender" value="女"></property>
 <!--级联赋值-->
 <property name="dept" ref="dept"></property>
 <property name="dept.dname" value="技术部"></property>
</bean>
<bean id="dept" class="com.NS.spring5.bean.Dept">
 <property name="dname" value="财务部"></property>
</bean>

IOC 操作 Bean 管理(xml 注入集合属性)

1、注入数组类型属性
2、注入 List 集合类型属性
3、注入 Map 集合类型属性

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

public class stu {
    private String [] course;
    private List<String> list;
    private Map<String ,String> map;
    private Set<String> set;
    private  List<Course> coursesList;
    public void setCoursesList(List<Course> courses) {
        this.coursesList = courses;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void setSet(Set<String> set) {
        this.set = set;
    }

    public void setCourse(String[] course) {
        this.course = course;
    }
    public void add(){
        System.out.println(Arrays.toString(course));
        System.out.println(list);
        System.out.println(map);
        System.out.println(set);
        System.out.println(coursesList);
    }
}

(2)在 spring 配置文件进行配置

<bean id="stu" class="com.NS.collectiontype.stu">
    <property name="course">
        <list>
            <value>Java</value>
            <value>数据库</value>
        </list>
    </property>
    <property name="map">
        <map>
            <entry key="JAVA" value="java"></entry>
            <entry key="PHP" value="php"></entry>
        </map>
    </property>

    <property name="set">
        <set>
            <value>MYSQl</value>
            <value>Redis</value>
        </set>
    </property>

    <property name="list">
        <list>
            <value>张三</value>
            <value>李四</value>
        </list>
    </property>

      <property name="coursesList">
          <list>
              <ref bean="course2"></ref>
              <ref bean="course1"></ref>
          </list>
      </property>
 </bean>
    
    <bean id="course1" class="com.NS.collectiontype.Course">
        <property name="course"  value="Spring5"></property>
    </bean>

    <bean id="course2" class="com.NS.collectiontype.Course">
        <property name="course" value="MyBatis"></property>
    </bean>

4、把集合注入部分提取出来

(1)在 spring 配置文件中引入名称空间 util

<?xml version="1.0" encoding="UTF-8"?>
<!--1)在 spring 配置文件中引入名称空间 util-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:util="http://www.springframework.org/schema/util"
       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
       http://www.springframework.org/schema/util
       http://www.springframework.org/schema/util/spring-util.xsd">

    <!--使用 util 标签完成 list 集合注入提取-->
    <util:list id="booklist">
        <value>易筋经</value><value>九阳真经</value><value>九阳神功</value>
    </util:list>
<!--
 设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象
  设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用
   getBean 方法时候创建多实例对象
-->

    <!--提取 list 集合类型属性注入使用-->
    <!--scope 属性值
      第一个值  默认值,singleton,表示是单实例对象
      `第二个值  prototype,表示是多实例对象 -->
    <bean id="book" class="com.NS.collectiontype.Book" scope="prototype">
        <property name="course" ref="booklist"></property>
    </bean>
</beans>

IOC 操作 Bean 管理(FactoryBean)

1、Spring 有两种类型 bean
一种普通 bean,另外一种工厂 bean(FactoryBean)
2、普通 bean:在配置文件中定义 bean 类型就是返回类型
3、工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样

第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean
第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型

public class Mybean implements FactoryBean<Course> {
    @Override
    //定义返回bean
    public Course getObject() throws Exception {
        Course course=new Course();
        course.setCourse("abc");
        return course;
    }
    
    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}

<bean id="myBean" class="com.atguigu.spring5.factorybean.MyBean">
</bean>

Spring5的@Test注解引入

Project Structure(快捷键 Ctrl + Alt + Shift + s),点击Project Structure界面左侧的“Modules”
在这里插入图片描述
点击右边绿色的 “+”号,选择第一个选项“JARs or directories…”,选择相应的jar包(IDEA的安装目录\lib\junit-4.11.jar,hamcrest-core-1.3.jar,junit.jar),点“OK”,jar包添加成功。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@Test
public void test3() {
 ApplicationContext context =
 new ClassPathXmlApplicationContext("bean3.xml");
 Course course = context.getBean("myBean", Course.class);
 System.out.println(course);
}

IOC操作Bean管理(bean 作用域 )

1、在 Spring 里面,设置创建 bean 实例是单实例还是多实例

2、在 Spring 里面,默认情况下,bean 是单实例对象

  @Test
    public void test1(){
        ApplicationContext context=new
                ClassPathXmlApplicationContext("bean2.xml");
        Book book2=context.getBean("book",Book.class);
        Book book1=context.getBean("book",Book.class);
        System.out.println(book2);
        System.out.println(book1);
    }

类型相同
3、如何设置单实例还是多实例
(1)在 spring 配置文件 bean 标签里面有属性(scope)用于设置单实例还是多实例
(2)scope 属性值
第一个值 默认值,singleton,表示是单实例对象
第二个值 prototype,表示是多实例对象

    <!--提取 list 集合类型属性注入使用-->
    <!--scope 属性值
      第一个值  默认值,singleton,表示是单实例对象
      `第二个值  prototype,表示是多实例对象 -->
    <bean id="book" class="com.NS.collectiontype.Book" scope="prototype">
        <property name="course" ref="booklist"></property>
    </bean>

(3)singleton 和 prototype 区别

第一 singleton 单实例,prototype 多实例
第二 设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象
设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用
getBean 方法时候创建多实例对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值