• spring 攻略


    1.5 指定Bean引用
    为了Bean之间相互访问,在Bean配置文件中通过<ref>元素为Bean属性或构造程序参数指定Bean引用。
    <property name="prefixGenerator">
    <ref bean="datePrefixGenerator"> 如果在同一个配置文件,可以使用local属性
    </property>
    简写:<property name="prefixGenerator" ref="datePrefixGenerator"/>
    pschema简写:
    <bean id="a" class="xxx" p:prefixGenerator-ref="datePrefixGenerator"/> -ref 区分Bean引用与简单属性值
    为构造函数指定Bean引用
    <constructor-arg>
    <ref local="datePrefixGenerator"/>
    </constructor-arg>
    简写:<constructor-arg ref="datePrefixGenerator"/>
    声明内部bean
    <property name="prefixGenerator">
    <bean class="com.wei.test.DatePrefixGenerator">
    <property name="pattern" value="yyyyMMdd"/>
    </bean>
    </property
    构造函数写法:
    <constructor-arg>
    <bean class="com.wei.test.DatePrefixGenerator">
    <property name="pattern" value="yyyyMMdd"/>
    </bean>
    </constructor-arg>

    1.6 为集合元素指定数据类型
    设置<value>标记的type属性指定元素类型
    <property name="suffixes">
    <list>
    <value type="int">5</value>
    <value type="int">10</value>
    <value type="int">15</value>
    </list>
    </property>
    或者设置集合标记的value-type属性指定集合所有元素的类型
    <property name="suffixes">
    <list value-type="int">
    <value>5</value>
    <value>10</value>
    <value>15</value>
    </list>
    </property>
    在java 1.5以上版本,可以用存储整数的类型安全集合定义suffixes列表,就不用再指定value-type属性。
    private List<Integer> suffixes;

    1.8 使用工厂Bean和Utility Schema定义集合
    集合工厂Bean:ListFactoryBean、SetFactoryBean、MapFactoryBean
    集合标记:<util:list>、<util:set>、<util:map>

    1.10 用@Required注解检查属性
    RequiredAnnotationBeanPostProcessor 是一个Spring Bean后处理器,检查带有@Required注解的所有bean属性是否设置。在每个Bean初始化之前执行。需要在Spring IoC容器中注册。只能检查属性是否已经设置,不能测试属性是否非空。
    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
    或者,Spring 2.5以上
    <context:annotation-config/>
    自定义注解检查属性
    package com.wei.test;
    ...
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface Mandatory {

    }

    将注解应用到必要属性的设置方法
    @Mandatory
    public void setPrefixGenerator(PrefixGenerator prefixGenerator) {
    this.prefixGenerator = prefixGenerator;
    }

    为了使用这个注解,需要在RequiredAnnotationBeanPostProcessor的requiredAnnotationType属性中指定
    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor">
    <property name="requiredAnnotationType">
    <value>com.wei.test.Mandatory</value>
    </property>
    </bean>

    1.11 用XML配置自动装配Bean
    <bean>的autowire属性指定自动装配模式,Spring支持的自动装配模式有:
    no*
    byName
    byType
    Constructor:小心避免歧义
    autodetect
    <beans>根元素的default-autowire属性,这个默认模式将被Bean自己指定的模式覆盖。

    1.12 用@Autowired和@Resource自动装配Bean
    Spring2.5起,可以用@Autowired和@Resource注解一个设置方法、构造程序、字段甚至任意方法自动装配特定的属性。
    为了让Spring自动装配具有@Autowired和@Resource注解的属性,必须在IoC容器注册一个AutowiredAnnotationBeanPostProcessor实例。
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

    <context:annotation-config/> 自动注册一个AutowiredAnnotationBeanPostProcessor实例。
    ------“自动装配一个兼容类型的Bean” @Autowired
    默认情况下,@Autowired的属性都是必需的,如果希望是可选的,可将@Autowired的required设置为false。
    @Autowired(required=false)
    @Autowired
    private PrefixGenerator[] prefixGenerators;

    @Autowired
    private List<PrefixGenerator> prefixGenerators;

    @Autowired
    private Map<String,PrefixGenerator> prefixGenerators;

    @Autowired
    @Qualifier("datePrefixGenerator")
    指定一个候选Bean,当按照类型的自动装配在IoC容器中有超过一个类型兼容的Bean时不会报错。

    @Qualifier 也可以应用到方法参数中进行自动装配
    private void inject(@Qualifier("datePrefixGenerator") PrefixGenerator prefixGenerator){
    this.prefixGenerator = prefixGenerator;
    }

    如果你希望一种特殊的Bean和配置在注解装饰字段或者设值方法时注入,可以创建一个自定义的限定符注解类型,这种类型必须用@Qualifier注解。
    package com.wei.test;
    ...
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD,ElementType.PARAMETER})
    @Qualifier
    public @interface Generator {

    String value();
    }

    @Autowired
    @Generator("prefix")
    private PrefixGenerator prefixGenerator;


    <bean id="datePrefixGenerator" class="com.wei.test.DatePrefixGenerator">
    <qualifier type="Generator" value="prefix"/>
    <property name="pattern" value="yyyyMMdd"/>
    </bean>

    ------“按照名称自动装配” @Resource
    为一个设值方法、构造程序或者字段加上注解。默认情况下,Spring试图找到一个与属性同名的Bean。但是可以显式地在name属性中指定Bean的名称。
    依赖JSR-250
    <dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>jsr250-api</artifactId>
    <version>1.0</version>
    </dependency>

    @Autowired
    @Resource("datePrefixGenerator")
    private PrefixGenerator prefixGenerator;

    1.13 继承Bean配置
    parent属性
    如果希望父Bean只作为模板而不能检索,必须将abstract设置为true,要求Spring不要实例化这个Bean。
    <bean id="sequenceGenerator" parent="baseSequenceGenerator"/>

    1.14 从Classpath中扫描组件
    组件扫描,利用特殊的典型化注解,从classpath中自动地扫描、检测、实例化组件。@Component基本注解、(@Repository、@Service、@Controller典型化注解)
    <context:component-scan base-package="com.wei" />
    使用分号分隔多个扫描包。
    这个元素,将注册一个AutowiredAnnotationBeanPostProcessor实例,这个实例能够自动装配带有@Autowired注解的属性。
    过滤扫描的组件:
    <context:component-scan base-package="com.wei">
    <context:include-filter type="regex" expression="com.apress..*Dao.*"/>
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    Spring支持4种过滤器表达式:annotation、assignable、regex、aspectj。
    如果用include过滤器检测所有名称包含Dao的类,***DaoImpl就能在没有典型化注解的情况下被自动检测出来。

  • 相关阅读:
    树的直径、重心、中心
    DP优化--四边形不等式
    P5569 【SDOI2008】 石子合并(黑科技)
    P3147 262144游戏
    P3205 【HNOI2010】合唱队
    Windows Server 2012 虚拟化实战:网络(一)
    Windows Server 2012 虚拟化实战:存储(二)
    Android使用最小宽度限定符时最小宽度的计算
    Eclipse调试Android App若选择“Use same device for future launches”就再也无法选择其他设备的问题
    Python的模块引用和查找路径
  • 原文地址:https://www.cnblogs.com/bookwed/p/6341076.html
Copyright © 2020-2023  润新知