Spring2.5学习3.1_用@Resource注解完成属性装配

几个概念解析:

1.Spring的依赖三种依赖注入方式:

使用构造器注入

使用属性setter方法注入

使用Field方式注入(用于注解方式)

2.注入依赖对象可以使用手工装配和自动装配,在实际应用在建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预知最终的装配结果。

(1)手工装配依赖对象的两种编程方式:

在XML配置文件中通过bean节点的方式实现;

<span style="white-space:pre">	</span><bean id="personDaoxxxx" class="xjj.dao.impl.PersonDaoBean"></bean>
          <span style="white-space:pre">	</span><bean id="personService" class="xjj.service.impl.PersonServiceBean">
          	<span style="white-space:pre">	</span><constructor-arg index="0" type="cn.itcast.dao.PersonDao" ref="personDao"/>
          	<span style="white-space:pre">	</span><constructor-arg index="1" value="xjj"/>
          </bean>

在java代码中使用@Autowired,@Resourced等注解方式进行装配;

<beans xmlns="http://www.springframework.org/schema/beans"
       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">

          <context:annotation-config/>

(2)自动装配方式

<bean id="personService" class="xjj.service.impl.PersonServiceBean" autowire="byType">

byType:在容器中寻找一个与需要自动装配的属性类型相同的Bean,如没有找到相符Bean,该属性就没有被装配上,如果找到超过一个相符的Bean时(不能出现有继承的两个类),会抛出No unique bean of type的异常;

byName:在容器中寻找和需要自动装配的属性名相同的Bean(或ID),如果没有找到相符的Bean,该属性就没有被装配上;

注意:byName和byType使用前要有一个默认的构造器,必须保证Bean能够初始化,否则的话会出现异常;

constructor:在容器中寻找与需要自动装配的Bean的构造方法参数一致的一个或多个Bean。如存在不确定Bean或构造方法,容器会抛出org.springframework.bean.unisatisfiedBependencyException异常。通过构造器注入的,构造器中的参数是按照byType装配的.;

autodetect:通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器那么将使用byType方式。

@Resource注解

为什么选择注解的方式对依赖对象进行注入呢?由于在XML配置文件中通过bean节点的方式进行装配时,当项目比较庞大时,随着bean的个数增多,bean对应的属性就会成千上万,最终xml文件就会很臃肿,这时为了给配置文件”瘦身“,这时注解的方式产生了。

现在看看使用注解的方式如何实现:

首先,加入两个命名空间,因为我们要打开使用注解方式的配置项: <context:annotation-config/>,由于该配置项annotation-config是在context命名空间下的,因此需要引入context命名空间以及它的schema文件。

 xmlns:context="http://www.springframework.org/schema/context"
 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

这个配置项的作用:隐式注册了多个对注释进行解析的处理器,注册这4个 BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解。

AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、

PersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor

注:@Resource注解在common-annotations.jar包下.

@Autowired与@Resource的区别,使用其中任何一个注解就可以了。

1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

2、@Autowired默认按类型装配,如果我在personDao 字段上加了@Resource注解,那么就会默认取personDao 字段的类型在Spring容器中寻找与这个类型匹配的bean,寻找到对应的bean之后就会把这个bean注入到该字段上来。默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired() @Qualifier("baseDao")

private PersonDao personDao ;

3、@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,

如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

时间: 2024-11-05 22:50:24

Spring2.5学习3.1_用@Resource注解完成属性装配的相关文章

用@Resource注解完成属性装配

使用Field注入(用于注解方式):注入依赖对象可以采用手工装配或者手工自动装配.在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 依赖注入—手工装配 手工装配依赖对象,在这种方式中又有两种编程方式. 1.在xml配置文件中,通过bean节点配置,如: 1 <bean id="orderService" class="cn.itcast.service.OrderServiceBean"> 2 //构造器注入 3

Spring(七)用@Resource注解完成属性装配

使用到注解需导入jar包:common-annotations.jar 手工装配依赖对象有两种编程方式: 一.在xml配置文件中通过bean节点进行配置,如: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001

@Resource注解完成自动装配

@Resource注解是通过名字来自动装配的.在spring中自动装配的模式如果是通过名字来自动装配那么必须保证bean的名字和pojo 的属性名一直. 下面是详细代码:说明了@Resource注解是通过名字来完成自动装配的,可以说@Resource注解在某些情况下可以代替@Autowired(通过类型)注解. Address类的代码如下: package com.timo.domain; import org.springframework.beans.BeansException; impo

Spring2.5学习4.1_静态代理实现

在静态代理中代理对象与被代理对象必须实现同一个接口,完整保留被代理对象的接口样式,也将接口不变的原则一致保留. 下面通过一个简单的示例来说明: HelloInterface接口 package proxy; public interface HelloInterface { public void sayHello(); } 实现HelloInterface接口的类HelloInterfaceImpl package proxy; public class HelloInterfaceImpl

深入探索spring技术内幕(四): 剖析@Resource注解实现原理与注解注入

一.@Resource注解原理 @Resource可以标注在字段或属性的setter方法上 1.  如果指定了name属性, 那么就按name属性的名称装配; 2. 如果没有指定name属性, 那就按照默认的名称查找依赖对象; 3. 如果按默认名称查找不到依赖对象, 那么@Resource注解就会回退到按类型装配; ① 先写一个自己的@MyResource: import java.lang.annotation.Retention; import java.lang.annotation.Re

@Autowired注解与@resource注解的区别(十分详细)

背景: 今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配.于是本着学什么东西都要一钻到底才能从菜鸟变大神的精神!!我就认真研究了一下,在此总结一波.以下内容先分别解释一下两个注解,再进行共同点与不同点的总结. @Autowired @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Aut

Spring2.5学习3.2_编码剖析@Resource注解的实现原理

首先看一下J2EE提供的@Resource注解:该注解默认安照名称进行装配,名称能够通过name属性进行指定, 假设没有指定name属性,当注解写在字段上时,默认取字段名进行依照名称查找,假设注解写在setter方法上默认取属性名进行装配. 当找不到与名称匹配的bean时才依照类型进行装配.可是须要注意的是,假设name属性一旦指定.就仅仅会依照名称进行装配. 这里我们模拟@Resource注解,便于理解注解的实现原理: 1.首先在前面模拟的容器中加入注入的方法annotationInject(

@Resource注解

@Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI context中的一个对象. Spring确实支持使用@Resource通过JNDI lookup来解析对象,默认地,拥有与@Resource注解所提供名字相匹配的“bean name(bean名字)”的Spring管理对象会被注入. 在下面的例子中,Spring会向加了注解的setter方法传递bean名为“dataSource”的Spring

@Resource注解(转)

@Resource 注解被用来激活一个命名资源(namedresource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI context中的一个对象.Spring确实支持使用@Resource通过JNDIlookup来解析对象,默认地,拥有与@Resource注解所提供名字相匹配的“beanname(bean名字)”的Spring管理对象会被注入.在下面的例子中,Spring会向加了注解的setter方法传递bean名为“dataSource”的Spring管理对象的