0
点赞
收藏
分享

微信扫一扫

Spring5 IOC容器管理------基于XML方式(续集)

认真的老去 2022-05-04 阅读 62
spring

IOC操作 Bean 管理 (factoryBean)

package com.zh.Day_02.Bean_Demo_05;
import org.springframework.beans.factory.FactoryBean;
//演示工厂bean

//    实现factoryBean这个接口
public class MyBean implements FactoryBean {
//    这个方法可以指定返回的类型
    @Override
    public Temp getObject() throws Exception {
        Temp temp = new Temp();
        temp.name="小浩浩~";
        return temp;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return FactoryBean.super.isSingleton();
    }
}
//指定返回的类型
public class Temp {
    public String name;

    @Override
    public String toString() {
        return "Temp{" +
                "name='" + name + '\'' +
                '}';
    }
}

  <bean id="ZhouHao" class="com.zh.Day_02.Bean_Demo_05.MyBean "></bean>
//测试
public class Test {
    @org.junit.jupiter.api.Test
    public void Test_(){
        ClassPathXmlApplicationContext
                context = new ClassPathXmlApplicationContext("com/zh/Day_02/Bean_demo_05/zh.xml");
//        可以看出 xml创建的对象是MyBean 返回的是Temp
        Temp mmm= context.getBean("ZhouHao", Temp.class);
        System.out.println(mmm);
    }
}

bean作用域

a) Spring中 默认的是一个单例的对象

public class Test {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext
                context = new ClassPathXmlApplicationContext("com/zh/Day_02/Bean_demo_06/zh.xml");
        Dome dome1 = context.getBean("Dome", Dome.class);
        Dome dome2 = context.getBean("Dome", Dome.class);
        System.out.println(dome1);
        System.out.println(dome2);
//        默认的对象是单例的 所以地址值是一样的
//        com.zh.Day_02.Bean_Demo_06.Dome@1e127982
//        com.zh.Day_02.Bean_Demo_06.Dome@1e127982

    }
}

b)通过scope 标签来设置是否是单例对象

<!--    演示 bean 中作用域的区别-->
<!--     默认的话是  单例的
        scope 中的值 : singleton  默认值 单例
                       prototype  表示多例
-->
    <bean id="Dome" class="com.zh.Day_02.Bean_Demo_06.Dome" scope="singleton"></bean>
<!--    <bean id="Dome" class="com.zh.Day_02.Bean_Demo_06.Dome" scope="prototype"></bean>-->

bean的生命周期

demo:

//演示 bean的生命周期
public class AAA {
    public String name;


    public AAA() {
        System.out.println("第一步 会调用这个对象的无参构造方法");
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("第二步 会调用这个set的属性方法");
    }
//    创建 初始化方法
    public void  initMethod(){
        System.out.println("第三步 调用这个初始化方法");
    }
//    创建 销毁方法
    public void destroyMethod(){
        System.out.println("第五步 执行这个销毁方法");
    }
}
<!--    需要手动的配置 初始化标签和 销毁标签的配置-->
    <bean id="AAA" class="com.zh.Day_02.Bean_Demo_07.AAA" init-method="initMethod" destroy-method="destroyMethod" >
        <property name="name" value="小浩纸~~"></property>
    </bean>
public class Test {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext
                context = new ClassPathXmlApplicationContext("com/zh/Day_02/Bean_demo_07/zh.xml");
        AAA aaa = context.getBean("AAA", AAA.class);
        System.out.println("第四步 获取创建bean实例对象");
//        手动调用这个销毁方法
        aaa.destroyMethod();
        /*  第一步 会调用这个对象的无参构造方法
            第二步 会调用这个set的属性方法
            第三步 调用这个初始化方法
            第四步 获取创建bean实例对象
            第五步 执行这个销毁方法*/

    }
}

IOC操作 Bean 管理 (引入外部属性文件)

        <!--直接配置连接池-->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
                <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/userDb"></property>
                <property name="username" value="root"></property>
                <property name="password" value="root"></property>
        </bean>

1、创建外部 properties文件

prop.driverClass=com.mysql.jdbc.Driver
prop.url=jdbc:mysql://localhost:3306/userDb
prop.userName=root
prop.password=root

2.把外部 properties 属性文件引入到 spring 配置文件中 —— 引入 context 名称空间

<?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"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       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  http://www.springframework.org/schema/context
                                http://www.springframework.org/schema/context/spring-context.xsd">

<!--        引入外部文件配置  需要引入context 名称空间-->
        <context:property-placeholder location="classpath:com/zh/Day_02/Bean_Demo_08/jdbc.properties"/>
                <!--配置连接池-->
                <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
                        <property name="driverClassName" value="${prop.driverClass}"></property>
                        <property name="url" value="${prop.url}"></property>
                        <property name="username" value="${prop.userName}"></property>
                        <property name="password" value="${prop.password}"></property>
                </bean>
</beans>
举报

相关推荐

0 条评论