美文网首页
SpringFramework实战指南件管 4章 要点

SpringFramework实战指南件管 4章 要点

作者: 大也 | 来源:发表于2023-11-29 11:28 被阅读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;
        }
    }
    

    相关文章

      网友评论

          本文标题:SpringFramework实战指南件管 4章 要点

          本文链接:https://www.haomeiwen.com/subject/wyfowdtx.html