Spring工厂方法

Spring工厂方法

IOC通过工厂模式创建bean方式有两种

  • 静态工厂方法

  • 实例工厂方法

    静态工厂方法

    实体类:

    package com.soutchwind.entitiy;

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Car {
       private  long id ;
       private  String name;

    }

静态工厂类:

package com.soutchwind.factory;

import com.soutchwind.entitiy.Car;

import java.util.HashMap;
import java.util.Map;

public class StaticCarFactory {
   private static Map<Long, Car>carMap;
   static {
       carMap = new HashMap<Long,Car>();
       carMap.put(1L,new Car(1L,"宝马"));
       carMap.put(2L,new Car(2L,"奔驰"));

  }
   public static  Car getCar(long id){
       return carMap.get(id);
  }

}

配置文件:

<!--配置静态工厂创建car-->
   <bean id="car" class="com.soutchwind.factory.StaticCarFactory" factory-method="getCar">
       <constructor-arg value="2"></constructor-arg>

Ioc自动装载(Autowrite)

IoC负责创建对象,DI负责完成对象的依赖注入,通过配置property标签的ref属性来实现注入bean

另一种更简单的依赖注入方式:自动装载,不需要手动配置property,ioc容器会自己选择bean完成注入。

自动装载有两种方式:

  • byName:通过属性名自动装载

  • byType:通过属性的数据类型自动装载。

byname方式
<?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="car" class="com.soutchwind.entitiy.Car">
           <property name="id" value="1"></property>
           <property name="name" value="宝马"></property>
       </bean>
<!--实现自动装载,autowire="byName",person根据缺少的属性名在ioc寻找与之相对的bean标签,如果找不到,该属性值为空-->
   <bean id="person" class="com.soutchwind.entitiy.Person" autowire="byName">
       <property name="id" value="1"></property>
       <property name="name" value="张三"></property>
   </bean>
bytype
<!--bytupe实现自动装载,person根据缺少属性的类的类型,在bean中寻找与属性的类名相同的类,注入相应的对象-->
<!--如果有多个对象都符合类的条件。则会报错。-->
   <bean id="person" class="com.soutchwind.entitiy.Person" autowire="byType">
       <property name="id" value="1"></property>
       <property name="name" value="张三"></property>
   </bean>

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

导航