对于自动装配的认识,经历了几个步骤
1手工配置xml
2在xml中配置bean,bean之间的注入关系用autowire
3不在xml中写autowire,写在annotation中
4干脆xml中一个bean也不写,bean和注入关系都挪到annotation中指定。
书接上回
使用注释进行autowire
上一讲用的注释的autowire,xml里面配置bean。
还是有一些麻烦,如果能不用配置bean,让spring自动扫描工程中(确切的说是给定包的位置)的类,然后把类自动实例化成bean,然后再根据类型或者名字的规则装配起来就更好了。
也就是说我们要达到这个效果,在上一讲的基础上,把xml中关于bean的配置也删除掉,并实现相同的效果。
0、先解释一下这次要用到的几个新注释
@Resource 放在set方法之上,表明这个地方需要注入对象(必须用component标注的类的对象).
@Component 放在类的声明上面,表明这是一个需要实例的对象,并给出对象的名字。用法见例子
1、首先修改UserService类
package com.spring.service;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.spring.dao.UserDao;
@Component("userService")
//这里的userService的名字会在
//UserService service = (UserService) ctx.getBean("userService");
//中用到
public class UserService {
private UserDao dao;
public UserDao getDao() {
return dao;
}
@Resource
//表示这里需要注入对象
public void setDao(UserDao dao) {
this.dao = dao;
}
public void add()
{
dao.add();
}
}
解释一下:类定义的上面用@Component注释表明这个类是需要实例化对象的,类似于在xml中定义了一个userService的bean。
@Resource表明这个地方需要注入对象,类似于在xml中用ref来表示注入的对象。
注意:同xml模式一样,被注入的对象必须实例化,也就是说被注入的UserDao这个类也需要加上@Component标签
2、修改UserDao类如下
package com.spring.dao;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@Component("dao")//UserDao实例化的对象名dao,用于之后的注入
public class UserDao {
public void add()
{
System.out.println("执行UserDao.add()方法");
}
}
3、这两个地方修改之后,相当于autowire模式下在xml中写了2个bean。之后的装配工作由spring完成。开始测试吧
4、测试。测试代码不变
package com.spring.service.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.service.UserService;
public class UserServiceTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ctx =new ClassPathXmlApplicationContext("springbeans.xml");
UserService service = (UserService) ctx.getBean("userService");
service.add();
}
}
测试结果如下
2014-8-27 17:34:10 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@30e3c624: display name [org.springframework.context.support.ClassPathXmlApplicationContext@30e3c624]; startup date [Wed Aug 27 17:34:10 HKT 2014]; root of context hierarchy
2014-8-27 17:34:10 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [springbeans.xml]
2014-8-27 17:34:10 org.springframework.context.support.ClassPathXmlApplicationContext obtainFreshBeanFactory
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@30e3c624]: org.springframework.beans.factory.support.DefaultListableBeanFactory@2cc22a3b
2014-8-27 17:34:10 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2cc22a3b: defining beans [dao,userService,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor]; root of factory hierarchy
执行UserDao.add()方法
[color="red"]一点其他[/red]
这里的注释@component可以改写为@Repository、@Service 和 @Controller,在具体使用中无差别,主要是为了从名字中识别这个被装配的组件在系统中的作用,仅此而已。
分享到:
相关推荐
5. **注解自动装配**(Annotation-based Autowiring):这是最常用的方式,使用`@Autowired`、`@Qualifier`等注解进行精确控制。 三、注解驱动的自动装配 1. **@Autowired**:这是最常用的注解,用于自动装配bean。...
- @Autowired与@Resource:虽然两者都可以用来自动装配,但@Autowired默认按类型匹配,而@Resource默认按名字匹配。 总结,Spring的@Autowired自动装配机制极大地简化了bean之间的依赖管理,提高了代码的可维护性。...
Annotation是一种元数据,允许开发者在代码中嵌入额外的信息,Spring则能够读取这些信息来实现其功能,如自动装配Bean、定义切点和通知等。 #### 二、Annotation在Spring中的应用 ##### 1. `@Autowired`与依赖注入...
- `@Autowired`: 自动装配依赖,Spring会根据类型或属性名自动找到合适的bean进行注入。 - `@Qualifier`: 当有多个相同类型的bean时,使用`@Qualifier`指定具体要注入的bean。 - `@Resource`: 与`@Autowired`类似...
需要注意的是,基本数据类型不能通过这种方式自动注入。 为了使`@Autowired`生效,需要在Spring容器中声明`AutowiredAnnotationBeanPostProcessor` Bean: ```xml <bean class="org.springframework.beans.factory...
通过`@Component`、`@Service`、`@Repository`等注解,我们可以快速地将类声明为Spring管理的Bean,而`@Autowired`和`@Resource`则负责自动装配依赖。这种配置方式减少了XML配置文件的复杂性,提升了开发效率。
本篇将详细探讨"3Spring使用annotation方式autowire"这一主题,包括注解驱动的自动装配(Autowiring)以及相关的源码分析。 ### 一、注解驱动的自动装配 自动装配是Spring框架的一个核心特性,它允许框架自动管理...
在不同的实现方式中,@Autowired 的标注位置不同,它们都会在 Spring 在初始化 userManagerImpl 这个 bean 时,自动装配 userDao 这个属性。区别是:第一种实现中,Spring 会直接将 UserDao 类型的唯一一个 bean ...
在Spring框架中,注解(Annotation)自动匹配注入IoC(Inversion of Control,控制反转)是一种关键特性,它极大地简化了Java应用的配置管理。本文将深入探讨这一主题,帮助开发者更好地理解和利用这一功能。 首先...
JSP Spring自动装配Bean实例详解 Spring框架是Java企业级应用开发的事实标准,它提供了全面的编程和配置模型。在Spring中,自动装配(autowiring)功能可以极大地简化Java对象的创建和组装。JSP(Java Server Pages...
在Spring框架中,注解自动装配(Annotation-based Autowiring)是一种简化依赖注入(Dependency Injection,简称DI)的方式,它允许开发者用注解来声明类的依赖,而无需使用XML配置文件。本教程将深入讲解如何使用...
在描述中提到的`@Resource`注解是`javax.annotation`包中的一个重要成员,用于标记字段、方法或方法参数,以便容器(如Spring或Java EE应用服务器)能够自动注入相应的依赖。`@Resource`注解的主要用途是在IoC...
Spring 框架中提供了两个重要的注解,分别是@Resource 和@Autowired,它们都是用于 bean 的自动装配的。了解这两个注解的区别和使用场景是非常重要的。 首先,@Autowired 是 Spring 提供的注解,需要导入 org....
而注解自动装配是其中的一种方式,它允许开发者使用注解(如@Autowired、@Resource等)在类或方法级别声明依赖关系,而无需在XML配置文件中指定。这大大简化了配置,提高了开发效率。 **具体实现和使用** 1. **@...
Spring的自动装配功能使得我们可以省去在XML中定义依赖关系。@Autowired注解可以自动将匹配的Bean注入到需要的字段或方法参数中。例如,如果有两个类UserService和UserRepository: ```java @Service public class ...
在深入探讨Spring框架中基于注解(Annotation)的依赖注入(Dependency Injection,简称DI)实现之前,我们首先需要理解几个核心概念:Spring框架、依赖注入、以及注解本身。 ### Spring框架简介 Spring框架是一个...
在本篇"spring学习笔记(六)"中,我们将深入探讨Spring框架的核心特性——自动装配(Autowired)。自动装配是Spring框架提供的一种方便的依赖注入方式,它能够自动为bean找到并设置其所需的依赖,极大地简化了应用的...
了解了`@Component`和`@Resource`之后,我们可以查看提供的压缩包文件"spring_1100_IOC_Annotation_Resource_Component",其中可能包含相关的代码示例、教程或者源码分析。通过学习这些内容,你可以更深入地理解这两...