使用 @Autowired 注解进行装配,只能是根据类型进行匹配。@Autowired 注解可以用于 Setter 方法、构造函数、字段,甚至普通方法,前提是方法必须有至少一个参数。@Autowired 可以用于数组和使用泛型的集合类型。然后 Spring 会将容器中所有类型符合的 Bean 注入进来。@Autowired 标注作用于 Map 类型时,如果 Map 的 key 为 String 类型,则 Spring 会将容器中所有类型符合 Map 的 value 对应的类型的 Bean 增加进来,用 Bean 的 id 或 name 作为 Map 的 key。
@Autowired 标注作用于普通方法时,会产生一个副作用,就是在容器初始化该 Bean 实例的时候就会调用该方法。当然,前提是执行了自动装配,对于不满足装配条件的情况,该方法也不会被执行。
当标注了 @Autowired 后,自动注入不能满足,则会抛出异常。我们可以给 @Autowired 标注增加一个 required=false 属性,以改变这个行为。另外,每一个类中只能有一个构造函数的 @Autowired.required() 属性为 true。否则就出问题了。如果用 @Autowired 同时标注了多个构造函数,那么,Spring 将采用贪心算法匹配构造函数 ( 构造函数最长 )。
@Autowired 还有一个作用就是,如果将其标注在 BeanFactory 类型、ApplicationContext 类型、ResourceLoader 类型、ApplicationEventPublisher 类型、MessageSource 类型上,那么 Spring 会自动注入这些实现类的实例,不需要额外的操作。
当容器中存在多个 Bean 的类型与需要注入的相同时,注入将不能执行,我们可以给 @Autowired 增加一个候选值,做法是在 @Autowired 后面增加一个 @Qualifier 标注,提供一个 String 类型的值作为候选的 Bean 的名字。举例如下:
@Autowired(required=false)
@Qualifier("ppp")
public void setPerson(person p){}
@Qualifier 甚至可以作用于方法的参数 ( 对于方法只有一个参数的情况,我们可以将 @Qualifer 标注放置在方法声明上面,但是推荐放置在参数前面 ),举例如下:
@Autowired(required=false)
public void sayHello(@Qualifier("ppp")Person p,String name){}
我们可以在配置文件中指定某个 Bean 的 qualifier 名字,方法如下:
<bean id="person" class="footmark.spring.Person">
<qualifier value="ppp"/>
</bean>
如果没有明确指定 Bean 的 qualifier 名字,那么默认名字就是 Bean 的名字。通常,qualifier 应该是有业务含义的,例如 "domain","persistent" 等,而不应该是类似 "person" 方式。
我们还可以将 @Qualifier 标注在集合类型上,那么所有 qualifier 名字与指定值相同的 Bean 都将被注入进来。
最后,配置文件中需要指定每一个自定义注解的属性值。我们可以使用 <meta> 标签来代替 <qualifier/> 标签,如果 <meta> 标签和 <qualifier/> 标签同时出现,那么优先使用 <qualifier> 标签。如果没有 <qualifier> 标签,那么会用 <meta> 提供的键值对来封装 <qualifier> 标签。示例如下:
<bean class="footmark.HelloWorld">
<qualifier type="MovieQualifier">
<attribute key="format" value="VHS"/>
<attribute key="genre" value="Comedy"/>
</qualifier>
</bean>
<bean class="footmark.HelloWorld">
<meta key="format" value="DVD"/>
<meta key="genre" value="Action"/>
</bean>
@Autowired 注解对应的后处理注册与前面相似,只需在配置文件中增加如下一行即可:
<context:annotation-config/>
如果 @Autowired 注入的是 BeanFactory、ApplicationContext、ResourceLoader 等系统类型,那么则不需要 @Qualifier,此时即使提供了 @Qualifier 注解,也将会被忽略;而对于自定义类型的自动装配,如果使用了 @Qualifier 注解并且没有名字与之匹配的 Bean,则自动装配匹配失败。
@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false)
分享到:
相关推荐
在实际项目中,还会涉及到更多高级特性,如拦截器、异常处理、视图解析等,这些都是SpringMVC注解方式的延伸应用。在"AnnotationTest"文件中,可能包含了实践这些概念的示例代码,进一步加深了对SpringMVC注解方式的...
`@Controller`注解是SpringMVC注解体系的核心之一。它用于标记一个Java类作为Spring的控制器,即处理HTTP请求并负责调用业务逻辑(模型层)和渲染视图的组件。此注解不仅将类注册为Spring IoC容器的Bean,而且明确其...
6. **创建Service**:定义业务接口和服务实现类,通过Spring的@Autowired注解注入Mapper,实现数据库操作。 7. **创建Controller**:编写控制器类,处理HTTP请求,调用Service层的方法,并将结果返回给视图层。 8....
此外,`@Autowired`注解用于自动装配依赖,Spring会根据类型或名称找到合适的bean注入到字段或方法参数中。例如: ```java @Autowired private UserService userService; ``` 在视图层,Spring MVC支持多种视图...
在本视频教程“Spring MVC + Spring + Hibernate 全注解整合开发 05”中,我们将深入探讨Java企业级开发中的三大核心技术——Spring MVC、Spring和Hibernate的集成应用,特别是如何利用注解进行高效无XML配置的开发...
以下是一个使用注解的Controller示例——`BbtForumController`: ```java package com.baobaotao.web; import com.baobaotao.service.BbtForumService; import org.springframework.beans.factory.annotation....
SpringMVC支持使用注解来简化配置,如@Controller、@RequestMapping、@Autowired等。这使得代码更简洁,降低了配置复杂度。 5. **拦截器(Interceptor)** 拦截器可以实现预处理和后处理功能,例如权限验证、日志...
SpringMVC利用Spring的核心特性——依赖注入(DI),使得控制器和其他服务之间的协作更加灵活。通过@Autowired注解,可以自动装配所需的bean。 6. **异常处理** SpringMVC提供了全局异常处理机制,通过@...
在本视频教程“Spring MVC + Spring + Hibernate 全注解整合开发视频教程 04”中,我们将深入探讨Java企业级开发中的三大核心技术——Spring、Spring MVC和Hibernate的集成与应用,尤其是通过注解实现的简化配置。...
6. **注解驱动**:SpringMVC支持使用注解进行配置,如@Controller、@RequestMapping、@Autowired等,减少XML配置。 **Hibernate框架详解:** Hibernate是Java领域中流行的ORM(对象关系映射)框架,它允许开发者...
- SpringMVC注解:如@RequestMapping、@RequestParam、@PathVariable等,用于处理HTTP请求。 6. **08AOP.xmind** —— 面向切面编程(AOP) - AOP概述:一种编程范式,用于处理系统中的横切关注点,如日志、事务...
8. **Service层**:创建Service接口及其实现类,封装业务逻辑,通过@Autowired注解注入Repository或Mapper。 9. **测试与运行**:编写JUnit测试用例,验证各层功能的正确性。部署项目到Tomcat服务器,通过浏览器...
3. **依赖注入**:SpringMVC充分利用Spring的核心特性——依赖注入(DI),使得组件之间松耦合,易于测试和维护。 4. **拦截器**:SpringMVC中的拦截器可以对请求进行预处理和后处理,如权限验证、日志记录等。 5....
然而,根据提供的信息,这里提到的是一个基于Spring、SpringMVC和Mybatis的更新版本——"spring+springmvc+mybatis"。这个架构组合同样广泛应用于现代Java Web应用程序中,提供了一个轻量级、灵活且功能强大的解决...
在MyPlan项目中,注解被广泛用于配置Spring、Spring MVC和Hibernate,比如@Controller、@Service、@Repository、@Autowired等,使得代码更加简洁,配置文件更少。 5. **FusionCharts**:FusionCharts是一款...
9. **Service与Controller**:编写业务层Service接口和实现类,以及控制器Controller类,通过Spring的@Autowired注解实现依赖注入。 10. **测试**:创建一个简单的RESTful API,例如`...
在这个案例中,你会看到如何集成SpringMVC和Mybatis,包括配置SqlSessionFactory,编写Mapper接口,以及使用@Autowired注解将Service注入到控制器中,从而实现数据的CRUD操作。 最后一个案例"Jwssm05"可能涉及更...
SSM框架是Java Web开发中常用的三大框架——Spring、SpringMVC和MyBatis的集成,它们协同工作,提供了一套高效、灵活的后端开发解决方案。以下将详细阐述这三大框架及其整合过程中的关键知识点。 1. Spring框架:...
【Java Web开发实例——SpringMVC与MySQL数据库的整合应用】 在Java Web开发领域,SpringMVC框架和MySQL数据库是两个非常重要的组成部分。SpringMVC是Spring框架的一部分,专门用于构建Web应用程序,而MySQL则是一...
【标题】"使用EasyUI+Springmvc实现的CRUD"主要涵盖了两个核心技术——EasyUI和SpringMVC,它们在Web开发中的应用以及如何协同工作来完成数据的创建、读取、更新和删除操作。 EasyUI是一款基于jQuery的前端UI框架,...