ioC特性

ioC特性

 

通过有参构造创建bean

  • 首先在实体类中创建对应的有参构造函数

  • 配置文件中有参构造的bean标签

    <bean id="student3" class="com.soutchwind.entitiy.Student">
       <constructor-arg name = "id" value="3"></constructor-arg>
       <constructor-arg name ="name" value="李四"></constructor-arg>
       <constructor-arg name="age" value="25"></constructor-arg>
       <constructor-arg name="address" ref="adress"></constructor-arg>
    </bean>

    通过·一个·bean标签引用两个bean标签(给bean注入集合)

    <bean id ="student" class="com.soutchwind.entitiy.Student">
       <property name="id" value="1"></property>
       <property name="name" value="张三"></property>
       <property name="age" value="24"></property>
       <property name="addresses" >
           <list>
               <ref bean="adress"></ref>
               <ref bean="address2"></ref>
           </list>
       </property>
    </bean>

scope作用域

Spring管理的bean是根据scope来生成的,scope表示bean的作用域,一共有四种,默认是单例模式。

  • singleton:单例,表示通过ioC容器获取的bean是单一的。

  • prototype:原型:表示通过ioC容器获取的bean是不同的。

  • request:请求:表示在一次http请求内有效。

  • session:回话,表示在一个用户会话内有效

request和session只适用于Web项目,大多数情况使用单例和原型较多。

单例模式:ioc容器中的bean标签存在一个对象,那你如果多次取拿这个对象,拿到的对象的内存地址都是相同的

说到底拿多次还是只拿到一个相同的对象。拿出来的对象都是相同的。scope默认都是单例模式。

原型模式:ioc容器标签中存在一个对象,第一次拿会直接复制一个与这个对象地址相同的拿过去,第二次就会创建一个新的地址的对象传过去,以此类推。

原型:当业务代码获取ioC中的bean时,Spring才会调用无参构造方法去创建对象。不获取就不创建。

单例:无论业务代码是否获取ioC容器中的bean,Spring.xml在被加载时就会创建bean.

 

即只要执行ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");加载配置文件这一操作,单例模式的bean中的对象就已经被创建了。

单例省空间,但是只要加载配置文件就会创建对象,可能用不上这个对象

原型:浪费空间,但是只会随着调用而创建,比较灵活.

原型和单例都只针对同一个bean标签,不同的bean标签也可以创建不同的对象。

 

Spring继承

与java的继承不同,java是类层面的继承,子类可以继承父类的方法,而Spring继承是对象层面的继承,子类可以继承父对象的属性值。也可以重写属性值。

  • 一个bean可以继承另一个bean的属性值,并且可以重写属性值。

  • 不同类创建的对象也可以继承,不过属性值要存在包含关系,属性值多的对象可以继承与自身相等或更少的属性值。父类有的属性,子类也一定要有,子类属性可以多于父类属性。

  • 不同类的实例化对象可以相互继承,这前提是子对象必须包含父对象的所有属性,同时可以在此基础上添加其他属性。

<!--    继承 ,子类对象继承父类对象的属性值,也可以重写属性值-->
   <bean id="stu" class="com.soutchwind.entitiy.Student" parent="student">
       <property name="name" value="李四"></property>
   </bean>

Spring依赖

依赖描述bean与bean之间的关系,被依赖的bean一定先被创建。bean标签执行顺序,从上至下,检验方式可通过构造方法输出顺序,看那个构造方法先打印语句

<!--正常情况下bean标签执行顺序从上至下,但是有了依赖之后,可以让被依赖的对象先执行-->
<!--address依赖于student,所以student的构造方法先执行-->
   <bean id="address" class="com.soutchwind.entitiy.Address1" depends-on="student"></bean>

       <bean id="student" class="com.soutchwind.entitiy.Student1"></bean>

Spring p标签

p标签起到简化bean标签的作用

<!--p标签可以简化bean标签,只需加上xmlns:p="http://www.springframework.org/schema/p"即可使用p标签-->
       <bean id="student" class="com.soutchwind.entitiy.Student" p:id="1" p:name="张三" p:age="32" p:addresses-ref="adress"></bean>
   <bean id="adress" class="com.soutchwind.entitiy.Address" p:id="2" p:name="科技路"></bean>
<!--原来bean标签语句-->
<!--   <bean id="student" class="com.soutchwind.entitiy.Student">-->
<!--       <property name="id" value="1"></property>-->
<!--       <property name="name" value="张三"></property>-->
<!--       <property name="age" value="32"></property>-->
<!--       <property name="addresses" ref="address"></property>-->
<!--   </bean>-->
<!--   <bean id="address" class="com.soutchwind.entitiy.Address">-->
<!--       <property name="id" value="2"></property>-->
<!--       <property name="name" value="科技路"></property>-->
<!--   </bean>-->

posted on 2023-02-08 10:15  张铁蛋666  阅读(24)  评论(0编辑  收藏  举报

导航