SpringFramework实战指南件管 4章 要点

2023-11-29  本文已影响0人  大也

-- ---------------------- 4.1/4.2 基于XML配置方式组理 概念
-- ---------------------- 4.2 基于XML配置方式 / 整合三层架构组件 练习
-- ---------------------- 4.3 基于 注解 方式管理 Bean
-- ---------------------- 4.4基于注解+配置类方式整合三层架构组件
-- ---------------------- 4.5/6三种配置方式总结/搭建测试环境

-- ---------------------- 4.1/4.2 基于XML配置方式组理 概念

  1. 无参数构造函数实例化的组件,进行ioc配置
    2.静态工厂类如何声明工厂方法进行ioc的配置
    3.非静态工厂如何声明ioc配置
    4.单个/多个 构造参数注入 有形参方式 推荐
    5.触发 set方法注入
    6.如何创建ioc容器并且读取配置文件 获取ioc容器的组件
    7.根据bean id 同时指定bean的类型 class 相关性质
    8.测试ioc配置内置方法的触发
    9.FactoryBean 标准化工厂类组件 实现
    10.4.2 基于XML方式整合三层架构组件 包括 jdbc 和DruidDataSource 使用
    11.4.3 基于 注解 方式管理 Bean
<bean id="HappyComponent1" class="com.atguigu.ioc_01.HappyComponent" />
<bean id="HappyComponent2" class="com.atguigu.ioc_01.HappyComponent" />
<!--2.静态工厂类如何声明工厂方法进行ioc的配置
 <bean - 一个组件信息 - 一个组件对象>
        id 组件标识 唯一 方便后期读取
        class  组件的工厂类的权限定符
        factory-method  必须是静态方法

-->
<bean id="ClientService" class="com.atguigu.ioc_01.ClientService" factory-method="createInstance" />
<!--3.非静态工厂如何声明ioc配置
    3.1 配置工厂类的组件信息
    3.2通过指定非静态工厂对象 和方法名来生成ioc信息
-->
<bean id="DefaultServiceLocator" class="com.atguigu.ioc_01.DefaultServiceLocator"/>
<bean id="DefaultServiceLocator_createClientServiceInstance" factory-bean="DefaultServiceLocator" factory-method="createClientServiceInstance"/>

</beans>

```objec-c
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">
    <!--4
    引用和被引用大的文件必须都存放在ioc容器中
    1.单个/多个 构造参数注入 
         2.2)有形参方式 推荐
         constructor-arg 构造参数传值的di配置
         value = 直接属性值 比如 string name = "二狗子"
         ref = 引用其他的bean beanid值
    -->
    <bean id="UserDao" class="com.atguigu.ioc_02.UserDao"/>
    <bean id="UserService1" class="com.atguigu.ioc_02.UserService" >
        <constructor-arg name="name" value="二狗子"/>
        <constructor-arg name="age" value="18"/>
        <constructor-arg ref="UserDao"/>
    </bean>

    <!--5 触发 set方法注入
        找的是set方法  格式 setMovieName  移除set M变小写 movieName
        所以等于是设置 set 属性
    -->
    <bean id="MovieFinder" class="com.atguigu.ioc_02.MovieFinder"/>
    <bean id="SimpleMovieLister" class="com.atguigu.ioc_02.SimpleMovieLister" >
        <property name="movieName" value="消失的他"/>
        <property name="movieFinder" ref="MovieFinder"/>
    </bean>
</beans>
    <!--6 讲解如何创建ioc容器并且读取配置文件
         创建容器 选择合适的容器实现即可
        接口BeanFactory
        ApplicationContext:
        ClassPathXmlApplicationContext      读取类路径下xml的配置方式
        FileSystemApplicationContext        读取指定文件路径下Xml的配置方式
        AnnotationConfigApplication         读取配置方式的Ioc容器
        WebApplicationContext               web项目专属的配置的ioc容器
        如何在ioc容器中获取bean
    -->
 //1.直接多太形式创建 Ioc容器类指定配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-03.xml");

        //2. 先创建Ioc容器 在设置配置地址 再刷新
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new  ClassPathXmlApplicationContext();
        classPathXmlApplicationContext.setConfigLocations("spring_03.xml");
        classPathXmlApplicationContext.refresh();
    <!--7 讲解如何创建ioc容器并且读取配置文件
         * 1 .创建ioc容器对象
         * 2.获取ioc容器的组件
         *  1)直接根据bean id 获取 返回值类型是obj 需要强转 不推荐
         *  2)根据bean id 同时指定bean的类型 class
         *  3) 根据类型获取
         *      但是如果有配置了2个 相应bean类 包括对应实现类/接口类
         *      就会出现 NOUnique 不是唯一的报错
         *      instanceof ioc容器的类型 == ture
    -->
Object happyComponent = classPathXmlApplicationContext.getBean("happyComponent");
        HappyComponent component = (HappyComponent) happyComponent;

        HappyComponent component1 = classPathXmlApplicationContext.getBean("happyComponent", HappyComponent.class);

        HappyComponent component2 = classPathXmlApplicationContext.getBean(HappyComponent.class);

        component.doWork();
        classPathXmlApplicationContext.close();
    <!--8  测试ioc配置内置方法的触发
     * 1)创建ioc容器 就会进行组件那对象的实例化 ->init
     * 2) 调用对应的close方法
    -->

<!--    <bean id="javaBean" class="jav"/>-->
    <bean id="javaBean" class="com.atguigu.Ioc_04.JavaBean" init-method="init" destroy-method="destory"/>
    <bean id="javaBean2" class="com.atguigu.Ioc_04.JavaBean2" scope="singleton"/>
    <bean id="javaBean22" class="com.atguigu.Ioc_04.JavaBean2" scope="prototype"/>
  <!--9 实现factoryBean接口
 * 步骤:
 *  1.实现factoryBean接口  在接口内 getObject  使用你自己的方法实例化对象就可以了
 *  2.配置相应的配置文件
    <bean id="javaBean" class="com.atguigu.Ioc_05.JavaBeanFactoryBean">
    <!--此位置属性是给JavaBeanFactoryBean 配置的 
           不是给javaBean 配置的 所以 需要 JavaBeanFactoryBean 定义变量承接 再注入
           javaBean
    -->
        <property name="value" value="xugougou"/>
    </bean>
 *      id      getobject 返回的对象的标识
 *              工厂也会加入到ioc容器 工厂方法的bean的标识为&id
 *              Object bean1 = classPathXmlApplicationContext.getBean("&javaBean");
 *      class   FactoryBean 标准化工厂类组件
 *
 *      FactoryBean 标准化工厂类组件 组件
 *      BeanFactory ioc容器最大的接口 ioc容器
    -->

public class JavaBeanFactoryBean implements FactoryBean<JavaBean> {

    private String value;

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public JavaBean getObject() throws Exception {
        JavaBean javaBean = new JavaBean();
        javaBean.setName(value);
        return javaBean;
    }

    @Override
    public Class<?> getObjectType() {

        return JavaBean.class;
    }
}
上一篇下一篇

猜你喜欢

热点阅读