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/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="personDao" class="test.spring.dao.impl.PersonDaoBean" />
    <bean id="personService" class="test.spring.service.impl.PersonServiceBean3">
        <constructor-arg index="0" type="test.spring.dao.PersonDao" ref="personDao"/>
        <constructor-arg index="1" value="LinDL"/>
    </bean>
</beans> 

二、在Java代码中使用@Autowired或@Resource注解方式进行装配。但需在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" 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">

    <!-- 把针对注解的容器注射到Spring容器中 -->
    <context:annotation-config />

    <bean id="..." class="..." />

</beans> 

这个配置隐式注册了多个对注释进行解析处理的处理器:AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor、

RequireAnnotationBeanPostProcessor

在代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:

@Autowired默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。

用于字段上

@Resource

private PersonDao personDao;

用于属性的setter方法上

@Resource

public void setPersonDao(PersonDao personDao) {

this.personDao = personDao;

}

一个应用@Resource的例子:

package test.spring.dao;

public interface PersonDao {

    public abstract void add();

}
package test.spring.dao.impl;

import test.spring.dao.PersonDao;

public class PersonDaoBean implements PersonDao {

    @Override
    public void add(){
        System.out.println("执行PersonDaoBean里的test1()方法");
    }
}
package test.spring.service;

public interface PersonService2 {

    public abstract void save();
}
package test.spring.service.impl;

import javax.annotation.Resource;

import test.spring.dao.PersonDao;
import test.spring.service.PersonService2;

public class PersonServiceBean4 implements PersonService2 {

    // 先根据属性名personDao在beans2.xml中查找注入,如果找不到对应的就会按照类型进行注入
    // @Resource
    // private PersonDao personDao;

    // 也可以指定配置文件中的id进行注入
    // @Resource(name = "personDaoxx")
    private PersonDao personDao;

    public PersonServiceBean4() {

    }

    public PersonDao getPersonDao() {
        return personDao;
    }

    // 也可以通过属性的setter方法进行注入,不能用于属性的getter方法
    @Resource
    public void setPersonDao(PersonDao personDao) {
        this.personDao = personDao;
    }

    @Override
    public void save() {
        personDao.add();
    }
}

beans2.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" 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">
    <!-- 把针对注解的容器注射到Spring容器中 -->
    <context:annotation-config />
    <bean id="personDaoxx" class="test.spring.dao.impl.PersonDaoBean" />
    <bean id="personService" class="test.spring.service.impl.PersonServiceBean4"></bean>
</beans> 
package test.spring.jnit;

import org.junit.Test;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import test.spring.service.PersonService2;

public class SpringTest3 {

    @Test
    public void testInject() {
        AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "beans2.xml");
        PersonService2 personService = (PersonService2) applicationContext
                .getBean("personService");
        personService.save();
        applicationContext.close();
    }

}

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,请注明出处:http://blog.csdn.net/lindonglian

时间: 2024-10-13 11:24:21

Spring(七)用@Resource注解完成属性装配的相关文章

用@Resource注解完成属性装配

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

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

几个概念解析: 1.Spring的依赖三种依赖注入方式: 使用构造器注入 使用属性setter方法注入 使用Field方式注入(用于注解方式) 2.注入依赖对象可以使用手工装配和自动装配,在实际应用在建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预知最终的装配结果. (1)手工装配依赖对象的两种编程方式: 在XML配置文件中通过bean节点的方式实现: <span style="white-space:pre"> </span><bean id

@Resource注解完成自动装配

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

Spring框架中利用注解进行自动装配的环境配置步骤和常见问题

第1步:配置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" xmlns:context="http://www.spring

【Spring基础学习】注解实现自动装配

在IOC容器中学习相关注解(常用) 1. @Autowired a.作用对象:(官网解释) 1. You can apply the @Autowired annotation to constructors: 2.you can also apply the @Autowired annotation to "traditional" setter methods: 3.You can also apply the annotation to methods with arbitra

Spring(七)之基于注解配置

基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. 在 XML 注入之前进行注解注入,因此后者的配置将通过两种方式的属性连线被前者重写. 一.@Required注解 @Required 注解应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitiali

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

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

Spring 与 @Resource注解

Spring 中支持@Autowired注解,能够实现bean的注入.同时,Spring 也支持@Resource注解,它和@Autowired类似,都是实现bean的注入.该注解存在javax.annotation.Resource包中. 使用方法如下: 1 import javax.annotation.Resource; 2 public class A{ 3 4 @Resource 5 private B b; 6 7 } 其中@Resource有两个参数会在spring配置中进行准确的

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

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