在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容器中,父类中的自动装配属性也是生效的。
本文出自 “飞鱼技术” 博客,请务必保留此出处http://flyingfish.blog.51cto.com/9580339/1722362
原文地址:http://flyingfish.blog.51cto.com/9580339/1722362