Spring注解实现自动装配过程解析

在IOC容器中学习相关注解(常用)

1. @Autowireda.作用对象:(官网解释)

1. You can apply the @Autowired annotation to constructors:

2.you can also apply the @Autowired annotation to "traditional" setter methods:

3.You can also apply the annotation to methods with arbitrary names and/or multiple arguments:

4.You can apply @Autowired to fields as well and even mix it with constructors:

5.It is also possible to provide all beans of a particular type from the ApplicationContext by adding the annotation to a field or method that expects an array of that type:

6.Even typed Maps can be autowired as long as the expected key type is String. The Map values will contain all beans of the expected type, and the keys will contain the corresponding bean names:等

总结一下就是: 可以在构造器,set方法,任意方法和属性上,数组上,String类型的Map上等。

Notes:1.@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false。

2.可以与@qualifier 共同使用, 当对象类型和名字发生冲突时,该注解可用于指定特定的对象。

@Autowired()
 @Qualifier("cat")

可以找到id="cat"的beanb.功能:它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。通过 @Autowired的使用来消除 set ,get方法。2.@Resourcea.功能: @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入

@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

3.@Requireda.功能:@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常。下面显示的是一个使用 @Required 注释的示例。

这有一个很好的解释和例子关于@Required注解

使用@Autowired后的优点

原来我们需要手动注入之后才可以使用employee对象:

<bean> <property name="employee" ref="employee"/>

若没有进行手动注入,不会从测试代码中 获取到employee对象。

使用@Autowired之后

不需要手动注入。

<bean id="car" class="com.ding.pojo.Car"/>

只用在属性上进行@Autowired注释标注

在测试类中即可直接调用:

public class MyTest {
  public static void main(String[] args) {

    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

    Car car = (Car) context.getBean("car");
    car.getOwner().MyEmployment();

  }
}

系统首先根据 bean中class类型进行确认,再和bean中id名进行确认,最后确定所定的注入对象。 若多个bean 名字不同,且类型相同则该注释失效。(可使用@Qualifier 进行唯一指定)

例如:

<bean id="owner22" class="com.ding.pojo.owner"/>
   <bean id="owner11" class="com.ding.pojo.owner"/>

运行相同代码会报如下错误:

此时加上@Qualifier注释如下,代码可正常编译:

运行结果:

如分享内容中有问题的地方,还望您多加指出,感谢您的浏览。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • spring @Component注解原理解析

    这篇文章主要介绍了spring @Component注解原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.@controller 控制器(注入服务) 2.@service 业务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>) 5.@Comp

  • springboot @ComponentScan注解原理解析

    这篇文章主要介绍了springboot @ComponentScan注解原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 @ComponentScan 告诉Spring从哪里找到bean. 如果你的其他包都在@SpringBootApplication注解的启动类所在的包及其下级包,则你什么都不用做,SpringBoot会自动帮你把其他包都扫描了. 如果你有一些bean所在的包,不在启动类的包及其下级包,那么你需要手动加上@Compone

  • 基于spring@aspect注解的aop实现过程代码实例

    @AspectJ 作为通过 Java 5 注释注释的普通的 Java 类,它指的是声明 aspects 的一种风格.通过在你的基于架构的 XML 配置文件中包含以下元素,@AspectJ 支持是可用的. 第一步:编写切面类 package com.dascom.hawk.app.web.tool; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.l

  • Spring Boot conditional注解用法详解

    1.conditional注解介绍 含义: 基于条件的注解 作用: 根据是否满足某一个特定条件来决定是否创建某个特定的bean 意义: Springboot实现自动配置的关键基础能力 2.常见conditional注解 @ConditionalOnBean 框架中存在某个Bean时生效 @ConditionalOnMissingBean 在Bean不存在时生效 @ConditionalOnClass框架中存在某个Class时生效 @ConditionalOnMissingClass在Class不

  • Springboot @Configuration @bean注解作用解析

    这篇文章主要介绍了springboot @Configuration @bean注解作用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 @Configuration注解可以达到在Spring中使用xml配置文件的作用 @Bean就等同于xml配置文件中的<bean> 在spring项目中我们集成第三方的框架如shiro会在spring.xml配置文件中进行配置,例如: <!-- 配置shiro框架提供过滤器工厂 --> <

  • springboot @WebFilter注解过滤器的实现

    @WebFilter注解过滤器 @WebFilter加在过滤器的注解上使用 import lombok.extern.slf4j.Slf4j; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; impo

  • Spring Bean管理注解方式代码实例

    1.使用注解的方式需要配置applicationContext.xml: <?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=&qu

  • Spring注解实现自动装配过程解析

    在IOC容器中学习相关注解(常用) 1. @Autowireda.作用对象:(官网解释) 1. You can apply the @Autowired annotation to constructors: 2.you can also apply the @Autowired annotation to "traditional" setter methods: 3.You can also apply the annotation to methods with arbitrar

  • 基于XML配置Spring的自动装配过程解析

    一.了解Spring自动装配的方式 采用传统的XML方式配置Bean组件的关键代码如下所示 <bean id="userMapper" class="edu.cn.dao.UserMapperImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> <bean id="userSer

  • 彻底搞明白Spring中的自动装配和Autowired注解的使用

    一.自动装配 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性.比如,如果我们的应用上下文中只有一个org.mybatis.spring.SqlSessionFactoryBean类型的Bean,那么任意一个依赖SqlSessionFactoryBean的其他Bean就是需要这个Bean.毕竟这里只有一个SqlSessionFactoryBean的Bean. 为了应对这种明确的装配场景,Spring提供了自动装配(autowiring).与其显式的装配

  • 基于Spring@Autowired注解与自动装配详谈

    1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss 拥有 Office 和 Car 类型的两个属性: 清单 3. Boss.java package com.baobaotao; public class Boss { private Car car; private Office office; // 省略 get/setter @Override p

  • Spring使用@Autowired注解实现自动装配方式

    目录 Spring支持注解配置 引入注解依赖 启用注解 使用@Autowired注解实现自动装配 1.IOC容器配置 2.实体类使用@Autowired注解注入属性 3.测试结果 @Autowired注解的使用和注入规则 1.使用在变量域上面 2.@Autowired注解使用在构造器上面 Spring支持注解配置 引入注解依赖 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="ht

  • spring IOC容器的Bean管理XML自动装配过程

    目录 什么是自动装配? 自动装配过程 1. 创建 2 个类 2. 配置文件 3. 测试方法 什么是自动装配? 在之前的内容中,每给属性注入值都要一个个的用 property 标签来完成,比如: <bean id="book" class="com.pingguo.spring5.collectiontype.Book" scope="prototype"> <property name="list" ref=

  • Java之Spring注解配置bean实例代码解析

    前面几篇均是使用xml配置bean,如果有上百个bean,这是不可想象的.故而,请使用注解配置bean !!! [1]注解类别 @Component : 基本注解, 标识了一个受 Spring(点击这里可以下载<Spring应用开发完全手册>) 管理的组件 @Repository : 标识持久层组件 @Service : 标识服务层(业务层)组件 @Controller : 标识表现层组件 Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. 对于扫描到的组

  • spring boot 2整合swagger-ui过程解析

    这篇文章主要介绍了spring boot 2整合swagger-ui过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.添加mvn依赖 修改pom.xml加入 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.5.0</v

  • Spring Boot使用过滤器Filter过程解析

    这篇文章主要介绍了Spring Boot使用过滤器Filter过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先我们说说什么是过滤器,过滤器是对数据进行过滤,预处理过程,当我们访问网站时,有时候会发布一些敏感信息,发完以后有的会用*替代,还有就是登陆权限控制等,一个资源,没有经过授权,肯定是不能让用户随便访问的,这个时候,也可以用到过滤器.过滤器的功能还有很多,例如实现URL级别的权限控制.压缩响应信息.编码格式等等. 过滤器依赖se

  • spring web.xml指定配置文件过程解析

    这篇文章主要介绍了spring web.xml指定配置文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-beans.xml</param-value> </context-param> 指定

随机推荐