以下的注释不管在那种配置组件的方法中都能用,这里只是实际需要才这么放的
用bean定义来配置组件
首先需要在xml 文件中添加如下 spring-context-3.0.xsd 文件
<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-3.0.xsd"> </bean>
<context:annotation-config /> <!--打开注解,注册处理器-->
这个配置隐式注册了多个对注释进行解析处理的处理器 AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor, RequireAnnotationBeanPostProcessor
@Autowired 注释
它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作(将bean的实例装到相应位置)
@Autowired 根据 类型从spring 配置文件中进行查找,注册类型必须唯一,否则报异常。
默认情况下它要求依赖对象必须存在,如果允许null,可以设置required属性为false
@Autowired(required = false) private ISoftPMService softPMService = new SoftPMServiceImpl();
与@Resource 的区别在于,@Resource 允许通过bean 名称或bean 类型两种方式进行查找
将@Autowired 注释标注在成员变量上
import org.springframework.beans.factory.annotation.Autowired; public class Boss { @Autowired private Car car; @Autowired private Office office; … }
spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用
必须事先在 Spring 容器中声明AutowiredAnnotationBeanPostProcessorBean。
<!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 --> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
这样,当Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描spring 容器中所有 Bean,
当发现 Bean 中拥有 @Autowired 注释时就找到和其匹配(默认按类型匹配)的Bean,并注入到对应的地方中去。
按照上面的配置,Spring 将直接采用 Java 反射机制对 Boss 中的 car 和 office 这两个私有成员变量进行自动注入。
所以对成员变量使用 @Autowired 后,大可将它们的 setter 方法删除。
通过 @Autowired 对方法或构造函数进行标注
将 @Autowired 注释标注在 Setter 方法上
public class Boss { private Car car; private Office office; @Autowired public void setCar(Car car) { this.car = car; } @Autowired public void setOffice(Office office) { this.office = office; } … }
这时,@Autowired 将查找被标注的方法的入参类型的 Bean,并调用方法自动注入这些 Bean。
将@Autowired 注释标注在构造函数上
public class Boss { private Car car; private Office office; @Autowired public Boss(Car car ,Office office){ this.car = car; this.office = office ; } … }
由于 Boss() 构造函数有两个入参,分别是 car 和 office,@Autowired 将分别寻找和它们类型匹配的 Bean,
将它们作为 Boss(Car car ,Office office) 的入参来创建 Boss Bean
实例:引用上一篇的实例
在xml中配置
<bean id="dao" class="com.qh.daoImp.daoImp"></bean> <bean id="serviceImp" class="com.qh.serviceImp.ServiceImp"></bean>
ServiceImp.java
package com.qh.serviceImp; import javax.annotation.Resource; import com.qh.dao.Dao; import com.qh.service.Service; public class ServiceImp implements Service { @Autowired //获取 Dao 字段,查找xml文件中的bean,找到 com.qh.daoImp.daoImp 这个类 private Dao dao; private String name; public ServiceImp(){} public void say(){ System.out.println(name); dao.add(); } }
注意:最好给ServiceImp类一个默认的构造方法
我们可以通过 @Qualifier 强制将 @Autowired 默认的查找方式改为 按照bean名称 查找
@Qualifier
@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、
构造函数入参。正是由于注释对象的不同,所以 Spring 不将 @Autowired 和 @Qualifier 统一成一个注释类。
@Autowired @Qualifier("dao")
@Qualifier 只能和 @Autowired 结合使用,是对 @Autowired 有益的补充。一般来讲,
@Qualifier 对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。
@Resource注释
@Resource 默认按bean 的name 进行查找,如果没有找到,会按type 进行查找,此时与@Autowired 类似
@Resource有一个name属性,可以根据name属性值查找对应的bean的id
在classpath自动扫描方式进行注解(解决用bean配置使文件过大问题)
原理:组件自动扫描机制,自动扫描类路径下标注了
@Controller:标注控制层组件(如struts中的action)
@Service:标注业务逻辑层组件
@Component :泛指组件,当组件不好归类的时候,可以用这个标注(不推荐使用)
@Repository:标注数据访问组件,即dao层
注释的类
首先需要在xml 文件中添加如下 spring-context-3.0.xsd 文件
<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-3.0.xsd"> </bean>
<context:component-scan base-package="com.qh"/> <!--此配置注册了包括<context:annotation-config />在内的处理器-->
base-package属性为需要扫描的包(包括子包)
然后在相应的层上标注即可
注意:bean 的ID 默认为类名称开头字母小写; 修改bean的名称:@Controller("cat")表示bean的名称为 cat
@Controller
@Controller的基本目标是担任所注解的类的原型的角色,指明它的职责。
Dispatcher将会在这样被注解的类中扫描映射的方法,探测注解@RequestMapping。
所注解的控制器bean可以被显式定义,这个过程是在Dispatcher的上下文中使用标准的Spring bean定义完成的。
然而,@Controller原型也允许自动探测。
@Service、@Component 、@Repository和@Controller类似
@scope:bean的作用范围(prototype、单例等)
例如:@Service @scop("prototype")
@PostConstruct(相当于 init-method方法)
在方法上加上注解@PostConstruct ,这个方法就会在Bean 初始化之后被Spring 容器执行(注:Bean 初始化包括,实例化Bean ,并装配Bean 的属性(依赖注入))。
@PreDestroy( 相当于 destroy-method 方法)
在方法上加上注解@PreDestroy ,这个方法就会在Bean 被销毁前被Spring 容器执行。
- spring2.5_1.rar (4.2 MB)
- 下载次数: 0
发表评论
-
@transitional事务传播行为和数据库隔离级别
2011-07-31 13:04 1223@transitional事务传播行为 ... -
spring+jdbc组合开发
2011-07-31 10:04 8071、架包:commons-dbcp.jar commons- ... -
spring+jdbc组合开发
2011-07-28 23:13 7spring+jdbc组合开发 1、架包:commons-d ... -
AOP_使用spring框架进行面向切面编程
2011-07-25 21:33 1181用spring实现AOP有两种方 ... -
AOP_基本概念
2011-07-23 00:00 708分散关注 将通用需求功能从不相关类之中分离出来;同时,能 ... -
AOP_使用CGLIB实现AOP功能
2011-07-22 00:02 784好处:不需要目标对象实现接口 使用的架包:cglib-nod ... -
AOP__使用JDK中的Proxy技术实现AOP功能
2011-07-21 22:28 540AOP主要用于权限的验证 细粒度的权限控制:对方法进行拦截, ... -
DI依赖注入_自动装配_autowire
2011-07-20 21:27 695自动装入:容器自动装 ... -
DI依赖注入_手动装配_非注解
2011-07-18 23:15 916基本数据类型的注入(将以下代码放到对象的bean中即可) 可 ... -
spring中的方法
2011-07-18 08:03 01、实例化spring容器 ApplicationConte ... -
spring基本概念
2011-07-17 21:38 575Ioc(控制反转):应用本 ...
相关推荐
在Spring框架中,依赖注入(Dependency Injection,DI)是一种设计模式,用于实现控制反转(Inversion of Control,IoC),降低组件之间的耦合度,使得各个组件的职责更加清晰。在Spring的面试中,面试官常会问到...
在Java世界中,Spring框架是应用最广泛的轻量级企业级开发框架,它的一大核心特性就是Inversion of Control(控制反转,简称IOC)和Dependency Injection(依赖注入,简称DI)。这两者是紧密相关的概念,有助于简化...
Spring框架的Dependency Injection(DI,依赖注入)是其核心特性之一,它允许开发者在运行时通过容器来管理对象及其依赖关系,而不是硬编码这些依赖。这样可以提高代码的可测试性和可维护性,降低了组件之间的耦合度...
Spring依赖注入(Dependency Injection,简称DI)是Java应用开发中常用的设计模式,它极大地提高了代码的可测试性和可维护性。在Spring框架中,依赖注入是核心特性之一,通过控制反转(Inversion of Control,IoC)...
它强调的是依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP),这使得开发者能够更加关注业务逻辑,而非基础设施代码。 二、集合自动装配的概念 集合自动装配是指Spring...
在传统的程序设计中,我们通常手动创建对象并管理它们之间的依赖关系,而在Spring中,这些任务由IOC容器来处理,实现了从依赖管理到依赖注入的转变。 控制反转(IOC)意味着应用程序不再直接创建对象,而是将对象的...
依赖注入(Dependency Injection,简称DI)是Spring框架的核心特性,它允许我们解耦应用程序的组件,使得代码更加灵活,易于测试和维护。依赖注入的概念主要分为两个方面:控制反转(Inversion of Control,简称IOC...
在IT行业中,Spring框架是Java开发中的一个基石,尤其在控制反转(IoC)和依赖注入(DI)方面。依赖注入是一种设计模式,它允许我们解耦组件,提高代码的可测试性和可维护性。Spring框架通过IoC容器来实现DI,让我们...
自动装配和方法注入是Spring实现依赖注入(Dependency Injection,DI)的两种主要方式。 首先,让我们理解什么是依赖注入。在面向对象编程中,对象通常会依赖于其他对象来完成其功能。传统的做法是通过构造函数或...
`@Autowired`注解是Spring框架提供的一种依赖注入(Dependency Injection,DI)机制,用于自动装配Bean。它可以根据类型或名称来查找并注入所需的依赖。默认情况下,Spring会根据Bean的类型来匹配,如果存在多个相同...
首先,`@Autowired`是Spring框架提供的一种依赖注入(DI,Dependency Injection)方式,用于自动装配bean的依赖。当我们在类的属性或方法上使用这个注解时,Spring会自动寻找匹配类型的bean并将其注入。这种方式比传统...
Spring框架是Java开发中广泛应用的一个轻量级容器,它的核心特性之一就是依赖注入(Dependency Injection,简称DI),而Spring的自动装配(Auto-Wiring)则是DI的一种实现方式。本篇文章将深入探讨Spring自动装配的...
在Spring框架中,注解是实现Inversion of Control(IoC)或依赖注入(DI)的一种强大工具。Spring 2.5引入了@Autowired注解,它极大地简化了配置,允许开发者在不编写XML配置文件的情况下完成bean的自动装配。本文将...
在Spring Boot框架中,依赖注入(Dependency Injection,简称DI)是一种关键的设计模式,它使得对象之间的依赖关系得以解耦,从而提高代码的可测试性和可维护性。Spring Boot通过注解简化了这一过程,让我们无需繁琐...
Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,极大地简化了应用程序的复杂性。在本教程中,我们将深入探讨如何通过XML配置在...
Spring框架是Java开发中的一个核心工具,它通过提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等功能,极大地简化了企业级应用的开发工作。注解配置是Spring 2.5引入...
Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(Dependency Injection,简称DI)特性而闻名,其中自动装配(Auto-Wiring)是DI的一种实现方式。自动装配允许开发者减少手动配置bean之间的依赖关系...
综上所述,"Spring之DI简介"涵盖了关于Spring框架依赖注入的基础理论和实践操作,对于理解和掌握Spring框架的使用具有重要意义。通过学习这个主题,开发者能够更好地理解如何在Spring中管理对象间的依赖关系,从而...
#### 一、Spring框架中的依赖注入(DI)与注解 Spring框架作为Java开发领域内最受欢迎的企业级应用框架之一,其核心特性之一就是依赖注入(Dependency Injection, DI),而依赖注入的核心在于解耦合。在Spring中,...
在Spring框架中,自动装配(Auto Wiring)是一种简化依赖注入(Dependency Injection,简称DI)的方式,它可以帮助开发者减少显式配置Bean之间的依赖关系。本文将详细介绍Spring中的自动装配方式,帮助您更好地理解...