This paper presents an approach to describe, deploy and manage component-based applications having dynamic functional and non-functional requirements. The approach is centered on architectural descriptions and associated high-level contracts. Besides specifying non-functional (or QoS) requirements, these contracts are used to guide architecture customizations required to enforce the requirements. The infrastructure required to manage the contracts follows an architectural pattern, which can be directly mapped to specific components included in a supporting reflective middleware. This approach allows designers to write a contract and to follow a standard recipe to insert the extra code required to its enforcement in the supporting middleware.