Spring 2.5注释程序执行过程和融合xml使用Spring2.5注释一、加载Spirng容器,在web.xml中:listener??? ???
Spring 2.5注释程序执行过程和融合xml使用
Spring2.5注释
一、加载Spirng容器,在web.xml中:
<listener>
??? ??? <listener-class>
??? ??? ??? org.springframework.web.context.ContextLoaderListener
??? ??? </listener-class>
??? </listener>
将Spring注册监听。
二、编写ApplicationContext.xml容器文件,当用户调用相应的Action类导致响应的注释的加载,将会导致ApplicationContext.xml的加载,在它加载的时候会搜索bean下匹配的注释处为其注入对象,所以Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。
如果是使用??? @Override 注释直接写入:
<?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-2.5.xsd">????????<bean?id="boss"?class="com.baobaotao.Boss">????????????<property?name="car"?ref="car"/>????????????<property?name="office"?ref="office"?/>????????</bean>????????<bean?id="office"?class="com.baobaotao.Office">????????????<property?name="officeNo"?value="002"/>????????</bean>????????<bean?id="car"?class="com.baobaotao.Car"?scope="singleton">????????????<property?name="brand"?value="?红旗?CA72"/>????????????<property?name="price"?value="2000"/>????????</bean>????</beans>???
若是:@autowired注释,要在文件头部加入:
<bean?class="org.springframework.beans.factory.annotation.???????????? AutowiredAnnotationBeanPostProcessor"/>???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
三、在bean类中使用注释:
package?com.baobaotao;?????????public?class?Boss?{?????????private?Car?car;?????????private?Office?office;?????????????//?省略?get/setter?????????????@Override????????public?String?toString()?{?????????????return?"car:"?+?car?+?"\n"?+?"office:"?+?office;?????????}?????}???
当使用@Override注释时,可以在使用了属性类和类对象的方法前对其注释,
而使用了@Autowired注释时可以在成员变量,方法或构造函数进行注释。(1)是@Autowired的注释bean:
package?com.baobaotao;?????import?org.springframework.beans.factory.annotation.Autowired;?????????public?class?Boss?{?????????????@Autowired????????private?Car?car;?????????????@Autowired????????private?Office?office;?????????????…????
这样可以在ApplicationContext.xml下如下配置:
?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-2.5.xsd">????????????<!--?该?BeanPostProcessor?将自动起作用,对标注?@Autowired?的?Bean?进行自动注入?-->????????<bean?class="org.springframework.beans.factory.annotation.?????????????AutowiredAnnotationBeanPostProcessor"/>????????????<!--?移除?boss?Bean?的属性注入配置的信息?-->????????<bean?id="boss"?class="com.baobaotao.Boss"/>??????????????<bean?id="office"?class="com.baobaotao.Office">????????????<property?name="officeNo"?value="001"/>????????</bean>????????<bean?id="car"?class="com.baobaotao.Car"?scope="singleton">????????????<property?name="brand"?value="?红旗?CA72"/>????????????<property?name="price"?value="2000"/>????????</bean>????</beans>??
(2)为了解决@Autowired中路径问题,@Qualifier注释:
Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常:
清单 13. 使用 @Qualifier 注释指定注入 Bean 的名称 ,如下:
@Autowired????public?void?setOffice(@Qualifier("office")Office?office)?{?????????this.office?=?office;?????}???
(3)@Resource,
(4)@PostConstruct
(5)@PreDestroy
?(6)@Component?? 注释连接:http://coolyongzi.iteye.com/blog/192957
?????? Spring 2.5 中除了提供 @Component注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这 3 个注释和 @Component 相比没有什么新意,但 Spring将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用@Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component对那些比较中立的类进行注释。
注释配置和 XML 配置的适用场合
是否有了这些 IOC 注释,我们就可以完全摒除原来 XML 配置的方式呢?答案是否定的。有以下几点原因:
???? (1)注释配置不一定在先天上优于 XML 配置。如果 Bean 的依赖关系是固定的,(如 Service 使用了哪几个 DAO类),这种配置信息不会在部署时发生调整,那么注释配置优于 XML 配置;反之如果这种依赖关系会在部署时发生调整,XML配置显然又优于注释配置,因为注释是对 Java 源代码的调整,您需要重新改写源代码并重新编译才可以实施调整。
(2)如果 Bean 不是自己编写的类(如 JdbcTemplate、SessionFactoryBean 等),注释配置将无法实施,此时 XML 配置是唯一可用的方式。
(3)注释配置往往是类级别的,而 XML 配置则可以表现得更加灵活。比如相比于 @Transaction 事务注释,使用 aop/tx 命名空间的事务配置更加灵活和简单。
所以在实现应用中,我们往往需要同时使用注释配置和 XML 配置,
对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创建和 Bean 注入之前将这两种配置方式的元信息融合在一起。 ????? Spring 在 2.1 以后对注释配置提供了强力的支持,注释配置功能成为 Spring 2.5 的最大的亮点之一。合理地使用Spring 2.5 的注释配置,可以有效减少配置的工作量,提高程序的内聚性。但是这并不意味着传统 XML 配置将走向消亡,在第三方类Bean 的配置,以及那些诸如数据源、缓存池、持久层操作模板类、事务管理等内容的配置上,XML 配置依然拥有不可替代的地位。