续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框架中,依赖注入(DI)是一种核心的设计模式,用于促进松耦合的系统设计,使得组件之间的依赖关系可以在运行时动态地建立,而不是在编译时硬...
如果注解没有指定`name`属性,Spring会使用字段名或方法名(对于setter方法,去掉`set`前缀)作为bean的名字。例如,对于`private MyService myService;`,Spring会查找名为`myService`的bean。 ### `@Resource`与`...
总的来说,Spring注解极大地简化了Spring应用的配置,使得开发者可以更加专注于业务逻辑,而不是繁琐的XML配置。通过合理使用@Autowired、@ComponentScan等注解,我们可以构建出松散耦合、易于维护的系统。在实践中...
在 Spring 3 中,注解成为了主要的配置方式,极大地简化了应用程序的配置。本文将详细介绍几个关键的注解,包括 @Autowired、@Qualifier、@Resource 和 @PostConstruct,以及它们在实际开发中的应用。 ## 1. @...
通过分析这个示例,我们可以更好地理解Spring自动检测注解的实际应用。 总结来说,Spring的自动检测注解`@Autowired`是DI的核心特性,通过它,我们可以方便地管理bean之间的依赖关系,提高代码的可测试性和可维护性...
本文将深入探讨如何实现一个类似于Spring的IoC注解装配机制。 IoC是Spring的核心概念,它通过反转对象的创建和管理权,将这些任务交给容器来处理,从而使开发者可以更专注于业务逻辑。在Spring中,DI是IoC的一种...
本文将详细讲解使用注解方式进行Bean属性注入的方法,以及相关的源码和工具应用。 首先,让我们了解Spring中的注解。在Spring 2.5版本之后,引入了基于注解的配置,这使得我们可以直接在类或方法上使用注解来声明...
在Spring框架中,装配是核心概念之一,它...通过理解这些基本的装配属性和原理,你可以更有效地利用Spring框架构建和管理你的应用程序。无论是XML还是注解方式,Spring都提供了灵活和强大的工具来满足不同项目的需求。
Spring注解的处理主要由两部分组成:元注解和注解处理器。元注解是用于创建其他注解的注解,如`@Target`、`@Retention`、`@Documented`和`@Inherited`,它们定义了注解的使用位置、生命周期、是否出现在Javadoc中...
然后,你可以逐步学习Spring注解的使用,如`@Controller`、`@Service`、`@Repository`等。同时,掌握Spring Boot的自动配置原理也很重要。最后,通过实际操作,创建一个类似的项目,实践是最好的老师。 8. **博文...
在Spring框架中,注解是一种强大的工具,它简化了配置并增强了代码的可读性。Spring注解的主要目的是消除XML配置...Spring注解的强大之处在于它们的灵活性和组合能力,使得开发者能够根据需求定制化应用的配置和行为。
1. `@Autowired`:这个注解用于自动装配Bean,Spring会尝试根据类型或者通过属性名来找到合适的依赖注入。如果存在多个候选Bean,可以通过`@Qualifier`进一步指定。 2. `@Qualifier`:与`@Autowired`配合使用,当有...
总结来说,Spring通过注解实现的IOC,主要包括了Bean的声明、依赖的自动装配、作用域的定义、生命周期方法的控制以及属性值的注入等功能。通过这些注解,开发者可以轻松地管理和控制应用程序中的对象,实现松散耦合...
1. **@Autowired**:这是Spring最常用的注解,用于自动装配bean。它可以根据类型、名称或属性的类型来查找并注入相应的bean。默认情况下,Spring会根据字段的类型来匹配bean。如果存在多个相同类型的bean,可以通过`...
在 Spring 3.x 中,提供了两种用于属性装配的注解:@Autowired 和 @Resource。 1. @Autowired @Autowired 注解用于自动装配依赖项,默认按照类型匹配的方式(byType)进行注入。可以用于成员变量、setter 方法、...
- **自动装配候选列表**:可以使用`@Autowired`注解的`@Qualifier`注解的`value`属性,提供一个bean的名称列表,Spring会尝试从列表中找到匹配的bean。 ### 4. 配置控制 - **@Autowired注解的可选性**:使用`...
1. 使用 Spring 注解来注入属性 在使用 Spring 框架之前,我们通常使用 setter 方法来注入属性,例如: Java 代码 ```java public class UserManagerImpl implements UserManager { private UserDao userDao; ...
注解装配的步骤如下: 1. **启用注解配置**:在Spring配置文件中添加`<context:component-scan>`标签,指定要扫描的包,这样Spring会自动发现带有`@Component`及其派生注解的类。 ```xml ``` 2. **注解Bean定义*...