`
在水伊方
  • 浏览: 111492 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Spring应用注解完成属性装配

 
阅读更多

续Spring依赖注入的方式:http://huangminwen.iteye.com/blog/1041743

 

在一个项目中,我们的Spring文件中会有许多bean,每个bean中都有一些属性,如果把所有bean的属性都配置在配置文件中,那么这时候我们的Spring配置文件是臃肿不堪的,而且维护起来也不方便,Spring为我们提供了用@Resource注解完成属性装配的功能解决这个问题

 

此时我们的配置文件变成了

<?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">
	
	<context:annotation-config />

	<bean id="personDAOBean" class="org.spring.dao.impl.PersonDAOBean" />

	<bean id="personServiceBean" class="org.spring.service.impl.PersonServiceBean"
		scope="prototype" />

</beans>  

 

此时的配置中就只有bean的信息了,显得很简洁,可以看到配置文件中增加了命名空间

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

与schemaLocation

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

还有标签

<context:annotation-config />

 

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

AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor

要想应用@Resource注解,则需要引入common-annotations.jar,该jar文件在spring安装目录的lib\j2ee下面

 

此时PersonServiceBean修改如下

package org.spring.service.impl;

import javax.annotation.Resource;

import org.spring.dao.PersonDAO;
import org.spring.service.PersonService;

public class PersonServiceBean implements PersonService {
	@Resource
	private PersonDAO personDAO;

	public void showMessage() {
		personDAO.add();
	}
}

 

测试类

package org.spring;

import org.junit.Test;
import org.spring.service.PersonService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
	@Test
	public void test() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"spring.xml");

		PersonService personService = (PersonService) ctx
				.getBean("personServiceBean");
		
		personService.showMessage();
	}
}

 

控制台结果

执行PersonDAOBean中的增加方法!

 

我们也可以把@Resource注解作用在setter方法上面,此时PersonServiceBean修改如下

package org.spring.service.impl;

import javax.annotation.Resource;

import org.spring.dao.PersonDAO;
import org.spring.service.PersonService;

public class PersonServiceBean implements PersonService {
	private PersonDAO personDAO;

	public void showMessage() {
		personDAO.add();
	}

	@Resource
	public void setPersonDAO(PersonDAO personDAO) {
		this.personDAO = personDAO;
	}
	
}

 

@Resource默认按名称装配,名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象,当找不到与名称匹配的bean才会按类型装配。

 

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

package org.spring.service.impl;

import javax.annotation.Resource;

import org.spring.dao.PersonDAO;
import org.spring.service.PersonService;

public class PersonServiceBean implements PersonService {
	private PersonDAO personDAO;

	public void showMessage() {
		personDAO.add();
	}

	@Resource(name="xxx")
	public void setPersonDAO(PersonDAO personDAO) {
		this.personDAO = personDAO;
	}
	
}

 

此时Spring配置中并没有名称为xxx的bean,所以会报错

分享到:
评论

相关推荐

    Spring注解注入属性

    ### Spring注解注入属性 #### 一、传统方式与注解方式对比 在Spring框架中,依赖注入(DI)是一种核心的设计模式,用于促进松耦合的系统设计,使得组件之间的依赖关系可以在运行时动态地建立,而不是在编译时硬...

    用@Resource注解完成属性装配

    如果注解没有指定`name`属性,Spring会使用字段名或方法名(对于setter方法,去掉`set`前缀)作为bean的名字。例如,对于`private MyService myService;`,Spring会查找名为`myService`的bean。 ### `@Resource`与`...

    spring注解 -----最简单的注解与自动装配例子

    总的来说,Spring注解极大地简化了Spring应用的配置,使得开发者可以更加专注于业务逻辑,而不是繁琐的XML配置。通过合理使用@Autowired、@ComponentScan等注解,我们可以构建出松散耦合、易于维护的系统。在实践中...

    spring3注解详细

    在 Spring 3 中,注解成为了主要的配置方式,极大地简化了应用程序的配置。本文将详细介绍几个关键的注解,包括 @Autowired、@Qualifier、@Resource 和 @PostConstruct,以及它们在实际开发中的应用。 ## 1. @...

    Spring demo 自动检测注解

    通过分析这个示例,我们可以更好地理解Spring自动检测注解的实际应用。 总结来说,Spring的自动检测注解`@Autowired`是DI的核心特性,通过它,我们可以方便地管理bean之间的依赖关系,提高代码的可测试性和可维护性...

    实现Spring那样的Ioc注解装配

    本文将深入探讨如何实现一个类似于Spring的IoC注解装配机制。 IoC是Spring的核心概念,它通过反转对象的创建和管理权,将这些任务交给容器来处理,从而使开发者可以更专注于业务逻辑。在Spring中,DI是IoC的一种...

    day38 17-Spring的Bean的属性注入:注解方式

    本文将详细讲解使用注解方式进行Bean属性注入的方法,以及相关的源码和工具应用。 首先,让我们了解Spring中的注解。在Spring 2.5版本之后,引入了基于注解的配置,这使得我们可以直接在类或方法上使用注解来声明...

    编码剖析Spring装配基本属性的原理

    在Spring框架中,装配是核心概念之一,它...通过理解这些基本的装配属性和原理,你可以更有效地利用Spring框架构建和管理你的应用程序。无论是XML还是注解方式,Spring都提供了灵活和强大的工具来满足不同项目的需求。

    spring中注解的实现原理

    Spring注解的处理主要由两部分组成:元注解和注解处理器。元注解是用于创建其他注解的注解,如`@Target`、`@Retention`、`@Documented`和`@Inherited`,它们定义了注解的使用位置、生命周期、是否出现在Javadoc中...

    Spring全注解project示例 (无web.xml配置)

    然后,你可以逐步学习Spring注解的使用,如`@Controller`、`@Service`、`@Repository`等。同时,掌握Spring Boot的自动配置原理也很重要。最后,通过实际操作,创建一个类似的项目,实践是最好的老师。 8. **博文...

    Spring 注解 小例子

    在Spring框架中,注解是一种强大的工具,它简化了配置并增强了代码的可读性。Spring注解的主要目的是消除XML配置...Spring注解的强大之处在于它们的灵活性和组合能力,使得开发者能够根据需求定制化应用的配置和行为。

    spring3注解详解

    1. `@Autowired`:这个注解用于自动装配Bean,Spring会尝试根据类型或者通过属性名来找到合适的依赖注入。如果存在多个候选Bean,可以通过`@Qualifier`进一步指定。 2. `@Qualifier`:与`@Autowired`配合使用,当有...

    Spring通过注解实现IOC

    总结来说,Spring通过注解实现的IOC,主要包括了Bean的声明、依赖的自动装配、作用域的定义、生命周期方法的控制以及属性值的注入等功能。通过这些注解,开发者可以轻松地管理和控制应用程序中的对象,实现松散耦合...

    (转)Spring 3.0 注解注入详解

    1. **@Autowired**:这是Spring最常用的注解,用于自动装配bean。它可以根据类型、名称或属性的类型来查找并注入相应的bean。默认情况下,Spring会根据字段的类型来匹配bean。如果存在多个相同类型的bean,可以通过`...

    spring3.x注解

    在 Spring 3.x 中,提供了两种用于属性装配的注解:@Autowired 和 @Resource。 1. @Autowired @Autowired 注解用于自动装配依赖项,默认按照类型匹配的方式(byType)进行注入。可以用于成员变量、setter 方法、...

    Spring@Autowired注解与自动装配.rar

    - **自动装配候选列表**:可以使用`@Autowired`注解的`@Qualifier`注解的`value`属性,提供一个bean的名称列表,Spring会尝试从列表中找到匹配的bean。 ### 4. 配置控制 - **@Autowired注解的可选性**:使用`...

    spring annotation注解

    1. 使用 Spring 注解来注入属性 在使用 Spring 框架之前,我们通常使用 setter 方法来注入属性,例如: Java 代码 ```java public class UserManagerImpl implements UserManager { private UserDao userDao; ...

    day38 16-Spring的Bean的装配:注解的方式

    注解装配的步骤如下: 1. **启用注解配置**:在Spring配置文件中添加`&lt;context:component-scan&gt;`标签,指定要扫描的包,这样Spring会自动发现带有`@Component`及其派生注解的类。 ```xml ``` 2. **注解Bean定义*...

Global site tag (gtag.js) - Google Analytics