在spring中,使用xml文件配置bean的方式比较繁琐,但是具有一定的灵活性,在不更改源代码的情况下就可以更改程序配置或者更改以来关系;使用注解配置的方式高效,但是失去了xml文件的灵活性。

    在这种情况下,我们可以使用xml文件与注解混合使用的方式进行配置bean,在不需要更改属性上可以使用注解的方式进行配置,但是在这个类上面不要使用@Component或者@Controller或者@Serverce等自动装配的注解,否则在xml文件中声明同一个类的bean时,在spring容器中会出现多个类型相同的bean,在自动装配过程中可能会出错(因为有多个相同类型的bean)。在xml文件中声明这个类的bean,这个类中使用@Resource等自动装配的注解也会生效。

例如:

/**
* @ClassName: AbstractXmlGenerator
* @Description: XmlGenerator抽象类,内置一个XmlReader和PathManager
* @date 2015年12月12日 下午9:21:21
*
*/
public abstract class AbstractXmlGenerator implements Generator{
    @Resource
    private XmlReader reader;
    private String xmlFilePath;
    private String query;
    @Resource
    private PathManager pathManager;
    public XmlReader getReader() {
        return reader;
    }
    public void setReader(XmlReader reader) {
        this.reader = reader;
    }

在xml文件中配置:

<bean id="forcedSeedsGenerator" class="collector.generator.AbstractXmlGenerator ">
<property name="query" value="lagou keyword"></property>
<property name="xmlFilePath" value=""></property>
</bean>
@Resource
    private XmlReader reader;

上述的自动装配也会自动进行,即使在xml中对该属性没有显式的配置。    

    若某字段使用了自动装配,而且在xml文件中也对该字段的属性进行了设置,xml文件中声明的这个bean将以xml文件中的配置为主,也就是说xml配置文件覆盖了自动装配。

    当子类继承父类,父类中有自动装配的属性,而且父类并没有在Spring容器中,父类中的自动装配属性也是生效的。