在Spring框架的发布版本中,共包含了20个不一样的模块,能够划分为6类不一样的功能。java
为了下降Java开发的复杂性,Spring采起了如下4种关键策略:spring
建立应用对象之间协做关系的行为一般称为装配(wiring),这也是依赖注入(DI)的本质。编程
当描述bean如何进行装配时,Spring具备很是大的灵活性,它提供了三种主要的装配机制:安全
Spring从两个角度来实现自动化装配:架构
@Component注解代表该类会做为组件类,并告知Spring要为这个类建立bean
@ComponentScan注解启用组件扫描
@Autowired注解实现自动装配框架
@Bean注解会告诉Spring这个方法将会返回一个对象,该对象要注册为Spring应用上下文中的bean。3d
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="knight" class="com.fiberhome.tongl.knight.BraveKnight"> <constructor-arg ref="quest" /> </bean> <bean id="quest" class="com.fiberhome.tongl.knight.SlayDragonQuest"> <constructor-arg value="#{T(System).out}" /> </bean> </beans>
在XML中声明DI时,会有多种可选的配置方案和风格。具体到构造器注入,有两种基本的配置方案可供选择:代理
属性注入,也有两种基本的配置方案可供选择:code
尽量地使用自动配置的机制。显式配置越少越好,以免显式配置所带来的维护成本。当你必需要显式配置bean的时候(好比,有些源码不是由你来维护的,而当你须要为这些代码配置bean的时候),应该优先选择基于Java的配置,它比基于XML的配置更增强大、类型安全而且易于重构。最后,只有当你想要使用便利的XML命名空间,而且在JavaConfig中没有一样的实现时,才应该使用XML。component
Spring定义了多种做用域,能够基于这些做用域建立bean,包括:
单例是默认的做用域,可是正如以前所述,对于易变的类型,这并不合适。若是选择其余的做用域,要使用@Scope注解,它能够与@Component或@Bean一块儿使用。
在Spring中,处理外部值的最简单方式就是声明属性源并经过Spring的Environment来检索属性。
@PropertySource引用类路径中.properties的文件。
@Value 属性占位符(配置PropertySourcesPlaceholderConfigurer bean)
DI有助于应用对象之间的解耦,而AOP能够实现横切关注点与它们所影响的对象之间的解耦。
@AspectJ注解解代表类不单单是一个POJO,仍是一个切面
@EnableAspectJAutoProxy注解启用自动代理功能
AspectJ提供了五个注解来定义通知