• 单例模式&BeanFactory与 ApplicationContext之间的区别


    BeanFactory博客书写 使用对象的时候创建,这是和ApplicationContext的区别

            Resource resource=new ClassPathResource("applicationContext.xml");

    BeanFactory ctx=new XmlBeanFactory(resource);

            获取到上下文,并没有初始化bean,等待使用bean的时候才初始化

      ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");

      所有的bean已经初始化了

      http://www.yesky.com/imagesnew/software/spring/beans.html

    代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构造器,创建实例对象

    AOP概念:

       AOP面向切面编程,横切关注点

    2.AOP专业术语

    切点:主业务类中能匹配到切点表达式的方法

    切面:通知和切点的集合  交叉业务类称为切面

    连接点:主业务类中的方法

    通知:增强类中的方法

    织入:动态的过程,将通知和切点绑定的过程称为织入

    基于xml的DI(Dependency Injection)

         注入类型:

           1.1设值注入(set方法注入):本质上是调用了Bean的setXXX()进行值的注入

           普通属性

              <property name="name" value="微冷的雨"></property>

              <property name="age" value="18"></property>

           域属性(JavaBean属性)

           <property name="myCar" ref="mmCar"></property>

    接下来到我们昨天学的了

    构造注入,开始以为很难,其实也不过如此

    12.  *构造注入:

             <bean id="stu2" class="cn.happy.day01.entity.Student">

    <constructorb-arg> 是构造标签

               <constructor-arg index="0" value="微冷的雨"></constructor-arg>  

               <constructor-arg index="1" value="18"></constructor-arg>  

               <constructor-arg index="2"  ref="mmCar"></constructor-arg>  

            </bean>

    13.命名空间p注入 (2个步骤)

    13.命名空间p注入 (2个步骤)

    *********************************************************

          1.1 使用前要先要在Spring配置文件中引入p命名空间

           xmlns:p="http://www.springframework.org/schema/p"

          1.2.本质上还是set方法注入   

          <!--02.p命名空间注入 -->

          <bean id="stu3" class="cn.happy.day01.entity.Student"

          p:name="国庆放假买手机" p:age="18" p:myCar-ref="mmCar">

    集合属性注入

    <bean id="array" class="cn.happy.spring04collection.MyCollection">

           <property name="array">

              <array>

                 <value>zly</value>

                 <value>lxl</value>

              </array>

           </property>

        </bean>

    List

       配置文件

         <bean id="listCollection" class="cn.day00di_xml.BeanCollection">

            <property name="list">

                <list>

                    <ref bean="car"></ref>

                    <ref bean="car2"></ref>

                </list>

            </property>

           </bean>

     Map

           <!--集合属性注入之           Map-->

          <bean id="mapCollection" class="cn.day00di_xml.BeanCollection">

              <property name="map">

                  <map>

                      <entry key="Green">

                          <ref bean="car2"></ref>

                      </entry>

                      <entry key="Pink">

      

         <!-- properties -->

        <bean id="properties" class="cn.happy.spring04collection.MyCollection">

           <property name="properties">

    和Map集合属性打出来的效果是一样的

              <props>

                <prop key="001">001</prop>

                <prop key="002">002</prop>

              </props>

           </property>

        </bean>

    1.1引入

        spring-aop-4.2.0.RELEASE.jar

         引入aopjar包是因为注解用到了aop的内容

        相同点:

        两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比,提供了更多的扩展功能。

       不同点:

        BeanFactory是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext

    component:组件

         一个bean,就是一个组件

         scan:浏览

    开启包扫描器

    cn.happy.entity

     <context:component-scan base-package="路径名"></context:component-scan>

    作业:

      3.BeanFactory 和ApplicationContext区别

       3.一个简单的例子来证明BeanFactory和ApplicationContext主要区别

        搭建工程的环境就不说了,直接上代码。

    1.首先创建一个实体类:User

    复制代码
    public class User {
    
         public User(){
    
          System.out.println("实例化User");
    
         }
    
    }
    复制代码

    2.在创建一个ApplicationContext.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="user" class="cn.test.User"></bean>
    
    </beans>
    复制代码

    3.创建测试类

       

    复制代码
    public class TestHappy {
    
     
    
    /**
    
     * BeanFactory的测试
    
     */
    
    @Test
    
    public void beanFactoryTest(){
    
    BeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
    
    }
    
     
    
     
    
    /**
    
     * ApplicationContext的测试
    
     */
    
    @Test
    
    public void applicationContextTest(){
    
    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
    
    }
    
     
    
    }
    复制代码

    BeanFactory测试结果:

     

    ApplicationContext测试结果:

           

      总结:

       BeanFactory当需要调用时读取配置信息,生成某个类的实例。如果读入的Bean配置正确,则其他的配置中有错误也不会影响程序的运行。而ApplicationContext 在初始化时就把 xml 的配置信息读入内存,对 XML 文件进行检验,如果配置文件没有错误,就创建所有的Bean ,直接为应用程序服务。相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。

  • 相关阅读:
    待学习资料
    Hive之数据类型
    Hive 之元数据库的三种模式
    Hive之数据模型
    311 jvm类加载以及对象回收相关
    221 netty模型相关
    J101
    213 NIO编程
    XXLJOB终止定时任务的犯二小故事
    XXL-JOB源码研究(1)---version 2.1.2
  • 原文地址:https://www.cnblogs.com/hualishu/p/7244179.html
Copyright © 2020-2023  润新知