【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

06-01 1975阅读

【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

文章目录

    • 🌍一. spring学习的核心内容
    • 🌍二. 基于 XML 配置 bean
      • 1. 通过类型来获取 bean
      • 2. 通过构造器配置 bean
      • 3. 通过 p 名称空间配置 bean
      • 4. 引用/注入其它 bean 对象
      • 5. 引用/注入内部 bean 对象
      • 6. 引用/注入集合/数组类型
      • 7. 级联属性赋值
      • 8. 通过静态工厂获取对象
      • 9. 通过实例工厂获取对象
      • 10. 通过 FactoryBean 获取对象(重点)
      • 11. bean 配置信息重用(继承)

        🙋‍♂️ 作者:@whisperrr.🙋‍♂️

        👀 专栏:spring👀

        💥 标题:【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean💥

        ❣️ 寄语:比较是偷走幸福的小偷❣️

        🌍一. spring学习的核心内容

        1. Spring 核心学习内容 IOC、AOP, jdbcTemplate, 声明式事务
        2. IOC: 控制反转 , 可以管理 java 对象
        3. AOP : 切面编程
        4. JDBCTemplate : 是 spring 提供一套访问数据库的技术, 应用性强,相对好理解
        5. 声明式事务: 基于 ioc/aop 实现事务管理,

          【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        Spring 几个重要概念

        Spring 可以整合其他的框架(解读: Spring 是管理框架的框架)

        Spring 有两个核心的概念: IOC 和 AOP

        IOC [Inversion Of Control 反转控制]

        2.为什么学习spring,我们看一下传统的开发模式

        【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        上图连接到数据库为例说明

        程序员编写程序, 在程序中读取配置信息

        创建对象, new Object???() // 反射方式

        使用对象完成任务

        而IOC 的开发模式 [EmpAction EmpService EmpDao Emp]程序 注解/配置方式)

        4.DI—Dependency Injection 依赖注入,可以理解成是 IOC 的另外叫法.

        5.Spring 最大的价值,通过配置,给程序提供需要使用的web 层[Servlet(Action/Controller)]/Service/Dao/[JavaBean/entity]对象,这个是核心价值所在,也是 ioc 的具体体现, 实现解耦.

        3.Debug 看一下 Spring 容器的处理机制,

        【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        Spring管理 Bean-IOC

        Bean管理包括两方面,创建 bean 对象和给 bean 注入属性,Bean 配置方式也有两种,基于 xml 文件配置方式和基于注解方式

        🌍二. 基于 XML 配置 bean

        1. 通过类型来获取 bean

        通过 spring 的 ioc 容器, 获取一个 bean 对象

        1. 创建 Monster.java
        2. 在 beans.xml 配置(说明前面已经配置好了)

        解读:

        1. 配置monster对象/javabean

        2. 在beans中可以配置多个bean

        3. bean表示就是一个java对象

        4. class属性是用于指定类的全路径->spring底层使用反射创建

        5. id属性表示该java对象在spring容器中的id, 通过id可以获取到对象

        6. 用于给该对象的属性赋值

        
        
        
        
        

        完成测试

        ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
        Monster monster = ioc.getBean(Monster.class);
        

        细节说明

        1. 按类型来获取 bean, 要求 ioc 容器中的同一个类的 bean 只能有一个, 否则会抛出异常

          NoUniqueBeanDefinitionException

          【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

        2. 这种方式的应用场景:比如 XxxAction/Servlet/Controller, 或 XxxService 在一个线程

          中只需要一个对象实例(单例)的情况

        3. 说明一下: 在容器配置文件(比如 beans.xml)中给属性赋值, 底层是通过

          setter 方法完成的, 这也是为什么我们需要提供 setter 方法的原因

        2. 通过构造器配置 bean

        在 spring 的 ioc 容器, 可以通过构造器来配置 bean 对象

        解读

        1. constructor-arg标签可以指定使用构造器的参数

        2. index表示构造器的第几个参数 从0开始计算的

        3. 除了可以通过index 还可以通过 name / type 来指定参数方式

        4. 解除大家的疑惑, 类的构造器,不能有完全相同类型和顺序的构造器,所以可以通过type来指定

        
        
        
        
        

        数据类型就是对应的 Java 数据类型,按构造器参数顺序

        
        
        
        
        

        完成测试

        ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
        Object monster02 = ioc.getBean("monster02");
        Object monster03 = ioc.getBean("monster03");
        

        通过 index 属性来区分是第几个参数

        通过 type 属性来区分是什么类型(按照顺序)

        3. 通过 p 名称空间配置 bean

        在 spring 的 ioc 容器, 可以通过 p 名称空间来配置 bean 对象

        完成步骤

        1. 在 beans.xml 配置, 增加命名空间配置
        2. xmlns:p="http://www.springframework.org/schema/p"

        1.将光标放在p , 输入alt+enter , 就会自动的添加xmlns

        2.有时需要多来几次

         
        p:monsterId="4" p:name="红孩儿"
        p:skill="吐火~"
        />
        

        完成测试

        ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
        Monster monster04 = ioc.getBean("monster04", Monster.class);
        

        4. 引用/注入其它 bean 对象

        在 spring 的 ioc 容器, 可以通过 ref 来实现 bean 对象的相互引用

        1. 其它含义和前面一样
        2. ref 表示 memberDAO 这个属性将引用/指向 id = memberDAOImpl 对象

        解读

        1.ref="memberDAO"表示 MemberServiceImpl对象属性memberDAO引用的对象是id=memberDAO 的对象

        2.这里就体现出spring容器的依赖注入

        3.注意再spring容器中, 他是作为一个整体来执行的, 即如果你引用到一个bean对象, 对你配置的顺序没有要求

        4.建议还是按顺序,好处是阅读的时候,比较方便

        
        
        
        

        5. 引用/注入内部 bean 对象

        
        	
        
        
        

        6. 引用/注入集合/数组类型

        给 bean 对象的 list 集合赋值

        
        
        
        
        
        
        
        

        给 bean 对象的 map 集合赋值

        
        
        
        monsterKey01
        
        
        
        
        
        monsterKey02
        
        
        
        
        
        

        给 bean 对象的 properties 集合赋值 结构k(String)-v(String)

        
        Java 工程师
        前端工程师
        大数据工程师
        
        
        

        给 bean 对象的数组属性注入值 ,array标签中使用 value 还是 bean , ref … 要根据你的业务决定

        
        银角大王
        金角大王
        
        
        

        给 bean 对象的 set 属性注入值

        
        
        
        
        
        
        
        
        
        
        

        1.主要掌握 List/Map/Properties 三种集合的使用.

        2.Properties 集合的特点

        1)这个 Properties 是 Hashtable 的子类 , 是 key-value 的形式

        2)key 是 string 而 value 也是 string

        7. 级联属性赋值

        spring 的 ioc 容器, 可以直接给对象属性的属性赋值, 即级联属性赋值

        
        
        
        
        
        

        8. 通过静态工厂获取对象

        先创建一个静态工厂

        public class MyStaticFactory {
        private static Map monsterMap;
        static {
        monsterMap = new HashMap();
        monsterMap.put("monster_01", new Monster(100, "黄袍怪", "一阳指"));
        monsterMap.put("monster_02", new Monster(200, "九头金雕", "如来神掌"));
        }
        public static Monster getMonster(String key) {
        return monsterMap.get(key);
        }
        }
        

        修改 beans.xml , 增加配置

        1 通过静态工厂获取/配置bean

        2. class 是静态工厂类的全路径

        3. factory-method 表示是指定静态工厂类的哪个方法返回对象

        4. constructor-arg value=“monster02” value是指定要返回静态工厂的哪个对象

        
        
        
        
        

        通过这个静态工厂获取的对象是同一个

        9. 通过实例工厂获取对象

        在 spring 的 ioc 容器, 可以通过实例工厂获取 bean 对象

        public class MyInstanceFactory {
        private Map monster_map;
        //非静态代码块
        {
        monster_map = new HashMap();
        monster_map.put("monster_01", new Monster(100, "猴子精", "吃人"));
        monster_map.put("monster_02", new Monster(200, "九头金雕", "如来神掌"));
        }
        public Monster getMonster(String key) {
        return monster_map.get(key);
        }
        }
        

        配置 beans.xm

        1.factory-bean 指定使用哪个实例工厂对象返回bean

        2. factory-method 指定使用实例工厂对象的哪个方法返回bean

        3. constructor-arg value=“monster03” 指定获取到实例工厂中的哪个monster

        
        
        
        

        通过这个实例工厂获取的对象是同一个,如果创建两次实例工厂,再分别获取对象就不是同一个,这是和静态工厂的区别。

        10. 通过 FactoryBean 获取对象(重点)

        public class MyFactoryBean implements FactoryBean {
        private String keyVal;
        private Map monster_map;
        {
        monster_map = new HashMap();
        monster_map.put("monster_01", new Monster(100, "黄袍怪", "一阳指"));
        monster_map.put("monster_02", new Monster(200, "九头金雕", "如来神掌"));
        }
        public void setKeyVal(String keyVal) {
        this.keyVal = keyVal;
        }
        @Override
        public Monster getObject() throws Exception {
        // TODO Auto-generated method stub
        return this.monster_map.get(keyVal);
        }
        @Override
        public Class getObjectType() {
        // TODO Auto-generated method stub
        return Monster.class;
        }
        @Override
        public boolean isSingleton() {
        // TODO Auto-generated method stub
        return true;
        }
        }
        

        解读

        1.通过 FactoryBean 来获取 bean 对象

        2.name=“keyVal” 就是 MyFactoryBean 定义的 setKeyVal 方法

        3.value=“monster_01” ,就是给 keyVal 的值

        
        
        
        

        11. bean 配置信息重用(继承)

        在 spring 的 ioc 容器, 提供了一种继承的方式来实现 bean 配置信息的重用

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码