浦东到虹桥航班:Spring注解详解

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 03:46:49

使用注解装配

1、引入注解需要的jar

@Resource注解在spring安装目录的lib\j2ee\common-annotations.jar

2、 xml配置文件中配置以下信息

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context-2.5.xsd">

          

3、两种注入方式区别

@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:

    @Autowired  @Qualifier("personDaoBean")

    private PersonDao  personDao;

 

@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。

例如:

@Resource(name="personDaoXXXX")

private PersonDao  personDao;//用于字段上

@Resource

public void setOrderDao(OrderDao orderDao) {//用于属性的setter方法上

   this.orderDao = orderDao;

 }

Resource注解注意:

1当不指明name时,按字段的name 属性查找xml文件中beanid,如果找到,就进行注入,如果找不到,则按字段的类型查找后进行注入。

2、如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

 

 

 

 

 

 

 

组件自动扫描机制

1、 xml配置文件中配置以下信息

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context-2.5.xsd">

         

其中base-package为需要扫描的包(含子包)

包含annotation 在内的很多处理器。

2、 四中注解

@Service用于标注业务层组件、 @Controller用于标注控制层组件(如struts中的action)、@Repository用于标注数据访问组件,即DAO组件。而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

说明:

1、 可以为注解指明名称:例如:@Service("personService")如果没指明名称则默认为第一个字母小写的类名称

2、 如果要配置bean的作用域,只需要用@Scope进行配置。例如:@Scope("prototype")

3、 初始化方法注解:@PostConstruct

4、 销毁方法注解:        @PreDestroy

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注释配置和 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 注入之前将这两种配置方式的元信息融合在一起。