• my-spring-learing(IOC-bean)


    spring 是 IOC 和AOP容器框架

    1) Spring的优良特性

     ①  非侵入式:基于Spring开发的应用中的对象可以不依赖于SpringAPI   也就是轻量级的意思

     ②  依赖注入DI——Dependency Injection,反转控制(IOC)最经典的实现。

     ③  面向切面编程Aspect Oriented Programming——AOP

     ④  容器Spring是一个容器,因为它包含并且管理应用对象的生命周期

     ⑤  组件化Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XMLJava注解组合这些对象。

    一站式:在IOCAOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)。

     xml

    <?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">
    
        <bean id="helloWorld" class="first.wtd">
            <property name="name" value="Spring????"></property>
        </bean>
    </beans>

     初使用IOC容器

    IOC是一种想法,DI就是现实的操作。
    IOC:A需要B,我通过容器直接把B放进去A,不需要敲命令行无实现放进去。

    在class中声明的类中必须有无参数的构造器,也就是wtd(){}  这个必须有。 

    这里的<property name="name">   中的名字必须是小写,必须有相对应的set get方法对应。

    //创建IOC容器对象,这个对象可以取值配置好的bean里面的东西,id对应的那些class中的类
            //ClassPathXmlApplicationContext   找到xml文件创建IOC对象。
            //WebApplicationContext  专门用于web工程下的。
            ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
            //获取具体的对象
            //wtd w = (wtd) context.getBean("helloWorld");  <------方法一
            wtd w = context.getBean("helloWorld",wtd.class);   ///<------方法二
            //调用方法
            w.say();

    配置 bean

     配置文件 

    <!--
    方法一:DI注入的第一种方法:set方法注入
    -->
    <bean id="car1" class="di.car">
    <property name="name" value="宝马"></property>
    <property name="price" value="123.23"></property>
    <property name="id" value="ZX071zs"></property>
    </bean>

    <!--
    方法二:构造器方式
    对应参数顺序赋值
        参数: index是放在哪个位置 type是按照哪种类型存储

    -->
    <bean id="car2" class="di.car">
    <constructor-arg value="奥迪"></constructor-arg>
    <constructor-arg value="ZX071zs"></constructor-arg>
    <constructor-arg value="123.23"></constructor-arg>
    </bean>
    <bean id="car3" class="di.car">
    <constructor-arg value="奥迪" index="0"></constructor-arg>
    <constructor-arg value="123.23" index="2"></constructor-arg>
    <constructor-arg value="ZX071zs" index="1"></constructor-arg>
    </bean>
    <!--
    当2000又可以赋值到int上面,又可以赋值到double,
    <constructor-arg value="123.23" index="2" type="java.lang.Double"></constructor-arg>
    -->

     方法三 p 命名空间

    xmlns:p="http://www.springframework.org/schema/p"    需要在上面插入这句话

      <!--
            使用p命名空间给bean赋值
        -->
        <bean id="car4" class="di.car" p:id="ZX071zs" p:name="奥迪" p:price="123.23">  可以减少<constructor-arg>和<property>标签的使用 

    当赋值为任意字符有问题时候:  <![CDATA[      这里写任意字符          ]]>

    此时的赋值语句发生变化:

         <property name="name" >
                <value><![CDATA[ 宝马!!!!]]></value>
            </property>
    <!-- 当赋值为一个类对象时候-->
    <bean id="ren" class="di.ren">
        <property name="name" >
            <value><![CDATA[ wtd]]></value>
        </property>
        <property name="ca" ref="car1"></property>
    </bean>
    <!-- 内部bean  当此时内部没有该name的bean时候就可以用-->
        <bean id="ren2" class="di.ren">
            <property name="name" value="wtd"></property>
            <property name="ca" >
                <bean class="di.car">   内部beaen只有当前才可以读取得到,所以不用id都可以                           
                    <property name="name" value="宝马"></property>
                </bean>
            </property>
        </bean>
    <!-- 当赋值为一个类对象时候,但是此时该对象赋值不全-->
    此时称为级联,一个对象对它进行的改动,其他的对象ref的时候看到的是改动后的对象。 <bean id="ren" class="di.ren"> <property name="name" value="wtd"></property> <property name="ca" ref="car1"></property>
       <property name="ca.id" value="1001"></property>
    </bean>
    <!-- 赋值空值 -->

    <property name="ca.name">

      <null></null>

    </property>
    <!-- list集合 -->
        <bean id="show1" class="di.show">
            <property name="name" value="wtd"></property>
            <property name="lis">
                <!-- 构造一个集合-->
                <list>
                    <ref bean="car1"></ref>
                    <ref bean="car2"></ref>
                    <ref bean="car3"></ref>
                    <bean class="di.car">
                        <property name="name" value="桑塔纳"></property>
                    </bean>
                </list>
            </property>
        </bean>
    此时对象中存放的是List[car];当原来的对象存放的是 car[];时候也可以用list标签
    同理,set对象也可以用<set>标签。
    这里的list只能内部使用

    util标签用于list,此时的list可以被外部引用  
      <util:list id="list1"> <ref bean="car1"></ref> <ref bean="car2"></ref> </util:list>   <bean id="show2" class="di.show"> <property name="name" value="wtd"></property> <property name="lis" ref="list1"> </property>    </bean>

     

     此时的map引用的是value-ref,value值指向ref引用的一个bean对象

    FactoryBean就是返回一个getobject方法返回对象。
    BeanFactory和FactoryBean的区别:BeanFactory就是IOC容器的基本实现,是spring的基础设施,FactoryBean是一个接口

    class

     

     

    此时的id,abstract 都不能被继承

    Bean中的依赖关系,如果依赖多个bean文件,用逗号隔开。

    baen的作用域

    如果想关闭IOC容器,用这样子的声明方式。
    ConfigurableApplicationContext conn = new ClassPathXmlApplicationContext("spring-di.xml"); conn.close();

     bean的生命周期

    bean配置连接数据库池子

    这里导入了mysql包和c3p0包

     

     

    到此,通过xml文件配置bean结束。

    通过注解方式配置文件

     类加注解

    由于接口不能声明对象,注解只能加在实现类上面。

     xml文件中扫描

    这是包的路径

    xml具体配置。

     

    此时的使用 

    自动赋值,看下面。

    自动装配样例

     

     这里的注解都加在对象头上面。

     

  • 相关阅读:
    UVA232-纵横字谜的答案
    【SpringBoot】Re 02 Import与自定义装配实现
    【SpringBoot】Re 01 补充学习
    【ECharts】04 数据交互
    【ECharts】03 样式
    【ECharts】02 饼图
    【ECharts】01 快速上手
    【Mycat】01 概述
    【Git】05 分支管理
    【Git】04 文件删除
  • 原文地址:https://www.cnblogs.com/0123wtdd/p/12266399.html
Copyright © 2020-2023  润新知