文档章节

Spring annotation 、Spring @Autowired 注解解析

fengzhi714
 fengzhi714
发布于 2016/09/27 14:10
字数 528
阅读 43
收藏 0

官方文档地址:

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-annotation-config

注解:提供大量的上下文声明, 配置更简短。

XML:擅长连接组件不触碰自己的源代码或重新编译它们。

@Autowired

@Autowired可以对属性、方法和构造函数进行标注,完成自动装配的工作 。
@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合 @Qualifier 使用

注解构造函数

public class MovieRecommender {
    private final CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
        this.customerPreferenceDao = customerPreferenceDao;
    }
}

注解方法

public class SimpleMovieLister {
    private MovieFinder movieFinder;

    @Autowired
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    } 
}
public class MovieRecommender {
    private MovieCatalog movieCatalog;

    private CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public void prepare(MovieCatalog movieCatalog,
            CustomerPreferenceDao customerPreferenceDao) {
        this.movieCatalog = movieCatalog;
        this.customerPreferenceDao = customerPreferenceDao;
    }  
}

注解属性:
成员变量添加@Autowired,Spring会直接将该类型的唯一一个bean赋值给这个成员变量;

成员变量set方法添加@Autowired,Spring会调用set方法将该类型的唯一一个bean装配到这个属性。

public class MovieRecommender {
    @Autowired
    private MovieCatalog[] movieCatalogs; 

    private Set<MovieCatalog> movieCatalogs;

    @Autowired
    public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) {
        this.movieCatalogs = movieCatalogs;
    }
}

 

 

创建 AutowiredDome 类:添加 ad2 属性变量并添加 @Autowired

package com.fengzhi.spring;

import org.springframework.beans.factory.annotation.Autowired;

public class AutowiredDome {

	@Autowired
	public AutowiredDome2 ad2;
	
}

创建 AutowiredDome2 类:创建id、name属性,并复制。

package com.fengzhi.spring;

public class AutowiredDome2 {

	private int id = 2;
	private String name = "luffy";

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

创建autowiredDome.xml,添加 autowiredDome、ad2 bean

<?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.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

	<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
	<!-- <context:annotation-config/> -->

	<bean id="autowiredDome" class="com.fengzhi.spring.AutowiredDome">
	</bean>
	
	<bean id="ad2" class="com.fengzhi.spring.AutowiredDome2">
	</bean>
</beans>

AutowiredAnnotationBeanPostProcessor @Autowired的处理器,查询所有带@Autowired的属性、方法、函数,自动添加对应 bean。

在spring配置文件中可以通过 <context:annotation-config /> 自动注册 AutowiredAnnotationBeanPostProcessor

创建测试类:TestAutowired

package com.fengzhi.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.fengzhi.spring.AutowiredDome;
 
public class TestAutowired {

	@Test
	public void testAutowired() {
		ApplicationContext context = new ClassPathXmlApplicationContext("autowiredDome.xml");

		AutowiredDome rd = (AutowiredDome) context.getBean("autowiredDome");

		System.out.println("Id : " + rd.ad2.getId());
		System.out.println("Name : " + rd.ad2.getName());
	}
}

运行结果:

@Autowired 自动将ad2对象实例化 ,所以可以获取到 AutowiredDome2 里面的数据

© 著作权归作者所有

共有 人打赏支持
fengzhi714
粉丝 6
博文 52
码字总数 16837
作品 0
佛山
后端工程师
私信 提问
【Spring】Autowiredd原理及与Resource注解区别

Autowired注解 Autowired顾名思义,表示自动注入,如下是Autowired注解的源代码: 从Autowired的实现可以看到,Autowired可以用于类的构造方法,类的字段,类的方法以及注解类型上,但是Aut...

weknow
2018/03/06
0
0
详解Java的Spring框架中的注解的用法

使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: 配置文件: 1.2. 引入@Autowired注解(不推荐使用,建议使用@Resource) 类的实现(对成员变量进行标注) 或者...

Airship
2018/04/22
0
0
Spring 注解注入详解

1.@Autowired注解(不推荐使用,建议使用@Resource) @Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。@Autowired的标注位置不同,它们都会在Spring在初始化这个b...

wpb王鹏博
2015/06/08
0
0
Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解

注:由于本人不大习惯注解方式,所以讲解完这里的注解实现基本配置之后,以后就不再单独把注解拿出来讲解了。 五:Spring注解 1.准备工作 (1)导入common-annotations.jar (2)导入schema文件 ...

长平狐
2012/11/12
152
0
spring ioc注解 IOC

@Autowired 1、Spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。 Java代...

五大三粗
2015/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

驰骋工作流引擎 -CCBPM如何自动升级

关键词:工作流引擎自动升级 工作流自动升级 升级步骤设置 1,CCBPM把更新分成三类, 应用程序代码更新、数据表结构更新、数据更新。 2,CCBPM在您登录流程设计器时自动判断当前的版本与数据库...

孟娟
13分钟前
0
0
socket套接字是什么

什么是 socket? socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算...

群星纪元
15分钟前
0
0
什么是TensorBoard?

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面: 从零开始学TensorFlow【01-搭建环境、HelloWorld篇】 什么是TensorFlow?...

Java3y
24分钟前
4
0
驰骋工作流引擎 -CCBPM如何自动升级

关键词:工作流引擎自动升级 工作流自动升级 升级步骤设置 1,CCBPM把更新分成三类, 应用程序代码更新、数据表结构更新、数据更新。 2,CCBPM在您登录流程设计器时自动判断当前的版本与数据库...

ccflow周朋
25分钟前
0
0
sass和less的优缺点

简述 sass和less都是css的预编译处理语言,他们引入了mixins,参数,嵌套规则,运算,颜色,名字空间,作用域,JavaScript赋值等 加快了css开发效率,当然这两者都可以配合gulp和grunt等前端构...

莫西摩西
47分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部