Alfresco is built on top of Spring framework. Almost every component in Alfresco is implemented as Spring bean.
There is a group of Spring beans called services that interact with the data (read/write content, edit metadata of nodes, browse nodes and their parents and children) and form the core of Alfresco.
More info about webscripts can be found here.
The original Architecture can be found here.
Alfresco has a web client called Alfresco Share that is a thin client for the Alfresco repository. It is based on a Spring Surf framework (a scriptable, content-oriented framework for defining pages, templates, components and layout of a web application).
Alfresco uses MyBatis (iBatis) persistence framework. The Community Edition works only with MySQL and PostreSQL (free databases). The Enterprise Edition works with commercial databases like MSSQL, Oracle, DB2. More info could be found here.
Extensions to the Alfresco repository are defined as spring beans of a specific type or are named using a specific name pattern and are processed at the startup of the server.
The services are defined as Spring beans and can be easily overridden by custom Spring bean with the same name. Additionally invocations of an existing Spring bean can be decorated using Spring AOP (AspectJ definitions).
The GUI part of Alfresco is usually hard to extend. To change the behavior of an existing functionality, the existing code should be changed directly which makes it hard to migrate to a newer version of Alfresco.