标签:sp
9.通过工厂方法配置
9.1静态工厂
注意不是配置静态工厂方法实例,而是配置bean实例
class 属性指向静态工厂的全类名
factory-method 指向静态工厂方法的名字
constructor-arg 如果工厂方法需要传入参数 则使用它传入参数
<bean id="car" class="com.alan.factory.CarFactory" factory-method="getCar"> <constructor-arg value="Ford"></constructor-arg> </bean>
    private static Map<String,Integer> cars = null;
        static{
            cars = new HashMap<>();
            cars.put("Aodi", 30000);
            cars.put("Ford", 10000);
        }
        public static String getCar(String name){
            return String.valueOf(cars.get(name));
        }9.2 实例工厂
实例工厂需要先创建工厂本身,再调用工厂的实例方法来返回bean的实例
<bean id="car2" factory-bean="carFactory" factory-method="getCar"> <constructor-arg value="ford"></constructor-arg> </bean>
先要配置工厂实例
    factory-bean 指向实例工厂方法的bean
    factory-method  指向实例工厂方法的名字
    constructor-arg  如果需要参数
9.3 通过FactoryBean配置
    class 指向FactoryBean的全类名
    property 配置FactoryBean的属性
    但实际返回的实例是factoryBean的getObject() 方法返回的实例
public class CarFactoryBean implement FactoryBean<Car>{
    public Car getobject(){}
    public Class<?> getobjectType(){}
    publci boolean isSigleton(){}
}9.4 基于注解方式配置Bean
组件扫描
    @Component    基本注解
    @Respository  持久层
    @Service      业务层
    @Controller   表现层
命名规则
    默认命名策略:使用非限定类名 第一个字母小写  也可以在注解中通过value属性 标示
扫描
<context:component-scan base-package="" resource-pattern="repository/*.class" />
<context:include-filter/>
<context:exclude-filter/>
@Service 一般放在impl实现类上 而不是接口上
<context:exclude-filter type="annotation" expression="org.framework.stereType.service"/>
<context:exclude-filter type="annotation" expression="org.framework.stereType.service"/>
时 需要添加 use-default-filters="false"
<context:exclude-filter type="assignable" expression="com.alan.test"/>
    annotation  所有标注了xxxAnnotation的类
assignable 所有继承或者扩展了XxxService的类
    关联关系配置
    组件装配
    <context:component-scan>元素还会自动注册一个AutowiredAnnotationBeanPostProcessor实例,该实例自动自动装配具有@Autowired  @Resource  @Inject注解属性
    @Autowired
    自动装配兼容类型的单个bean属性
    可以放在属性 构造器 方法上面
    如果没有该类型 会抛异常  如果允许不被设置 可以配置属性 required=false
    如果有几个相同类型的类  也会抛出异常 可以使用Qualifier("")指定具体名称
    放在数组上面  集合 Map 会自动匹配类型   Map name为key  bean为值
    @Resource
    要求提供一个名称属性  若为空 则采用标注出的变量或方法名作为bean的名称
    @Inject
    与@Autowired类型  但没有required属性
10. 泛型依赖注入
引用在父类类型,但是真正注入是在子类实现。
    
标签:sp
原文地址:http://duzhizj.blog.51cto.com/6018951/1828271