关于注解的参考
参考:
http://sducxh.iteye.com/blog/639761
http://zhangli-lisa.iteye.com/blog/604747
@Autowired默认按类型装配,@Resource默认按名称装配,当找不到名称匹配的bean才会按类型装配。
@Autowired
-------------------------------------------------------
@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动注入。
@Autowired的标注位置不同,它们都会在Spring在初始化industryService这个bean时,自动装配industryDao这个属性,
区别是:
@Autowired
private IndustryDao industryDao;
第一种实现中,Spring会直接将IndustryDao类型的唯一一个bean赋值给industryDao这个成员变量;
@Autowired
public void setDao(IndustryDao industryDao)
{
super.setDao(industryDao);
}
第二种实现中,Spring会调用setDao方法来将IndustryDao类型的唯一一个bean装配到industryDao这个属性。
@Autowired是根据类型进行自动注入的,如果spring配置文件中存在多个IndustryDao类型的bean时,或者不存在IndustryDao类型的bean,都会抛出异常。
@Resource
-------------------------------------------------------
spring支持@Resource、@PostConstruct以及@PreDestroyJSR-250的标准注解。
@Resource可以按type注入,也可以按name注入。@Resource默认按byName自动注入。
Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
如果既没有指定name,又没有指定type,则自动按照byName方式进行装配(见2);如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配;
@Component
-------------------------------------------------------
虽然我们可以通过 @Autowired 或 @Resource 在 Bean 类中使用自动注入功能,但是 Bean 还是在 XML 文件中通过 <bean> 进行定义 —— 也就是说,在 XML 配置文件中定义 Bean,通过 @Autowired 或 @Resource 为 Bean 的成员变量、方法入参或构造函数入参提供自动注入的功能。能否也通过注释定义 Bean,从 XML 配置文件中完全移除 Bean 定义的配置呢?答案是肯定的,我们通过 Spring 2.5 提供的 @Component 注释就可以达到这个目标了。
在使用 @Component 注释后,Spring 容器必须启用类扫描机制以启用注释驱动 Bean 定义和注释驱动 Bean 自动注入的策略。
@Scope
-------------------------------------------------------
一般情况下,Bean 都是 singleton 的,需要注入 Bean 的地方仅需要通过 byType 策略就可以自动注入了,所以大可不必指定 Bean 的名称。如果需要使用其它作用范围的 Bean,可以通过 @Scope 注释来达到目标。
@PostConstruct 和 @PreDestroy
-------------------------------------
Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,您既可以通过实现 InitializingBean/DisposableBean 接口来定制初始化之后 / 销毁之前的操作方法,也可以通过 <bean> 元素的 init-method/destroy-method 属性指定初始化之后 / 销毁之前调用的操作方法。
@PostConstruct 注释的方法将在类实例化后调用,而标注了 @PreDestroy 的方法将在类销毁之前调用。