IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring5 IOC容器管理------基于XML方式(续集) -> 正文阅读

[Java知识库]Spring5 IOC容器管理------基于XML方式(续集)

IOC操作 Bean 管理 (factoryBean)

a) Spring中有两种bean,一种是普通的bean,另外一种是工厂bean(faceoryBean)
b)普通类型的bean 定义了什么类型就返回什么类型
c)工厂bean 定了的类型和返回的类型可以不一致

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

c)singleton 和 prototype 的区别
singleton 是单例的 、 prototype是多实例的
singleton 在加载 spring xml 文件的时候会创建对象
prototype 加载xml 不会创建对象 在调用getBean() 方法的时候才会创建对象

bean的生命周期

a)生命周期
1、从对象创建到对象销毁的过程
b)bean 生命周期过程
(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)调用 bean 的初始化的方法(需要进行配置初始化的方法)
(4)bean 可以使用了(对象获取到了)
(5)当容器关闭时候,调用 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实例对象
            第五步 执行这个销毁方法*/

    }
}

c) bean 的后置处理器,bean 生命周期有七步 (正常生命周期为五步,而配置后置处理器后为七步)
? (1)通过构造器创建 bean 实例(无参数构造)
? (2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
? (3)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization
? (4)调用 bean 的初始化的方法(需要进行配置初始化的方法)
? (5)把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization
? (6)bean 可以使用了(对象获取到了)
? (7)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

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

方式一 直接配置数据库信息:1、配置druid 连接池 2、引入 druid依赖

        <!--直接配置连接池-->
        <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>
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 10:55:43  更:2022-05-06 10:58:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:32:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码