spring4——IOC之基于注解的依赖注入(DI )
spring容器对于Bean的创建和对象属性的依赖注入提供了注解的支持,让我们在开发中能够更加便捷的实现对象的创建和对象属性的依赖注入。
一,对于Bean的创建spring容器提供了以下四个注解的支持:
1、@Component
2、@Repository dao层实现类的注解
3、@Service service层实现类的注解
4、@Controller controller层实现类的注解
以上四个注解在普通使用中是等效的,但在web项目中为了区分三层架构中不同层之间Bean的创建,为了避免注解使用的混乱,使用后三个注解进行区分。
二,对于Bean属性的依赖注入分为两类,一类是对于属性是String类型或者基本数据类型Spring容器提供了@Value这个注解,另一类是对于属性是对象的提供了@Autowired和@Resource这两个注解。
其中,@Autowired这个注解是spring框架自带的注解,而@Resource(javax.annotation.Resource)这个注解是javax扩展包中注解规范的一种,而spring对这一注解提供了支持。
下面我们通过实验来说明注解对于bean创建和bean属性依赖注入的实现。
首先要在配置文件中配置注解扫描的驱动。
<context:annotation-config/>
<context:component-scan base-package="com.opensource"/>
这里提一句,如果配置了注解扫描包的范围,也就是第二行,那么<context:annotation-config/>可以不用配置,因为配置扫描包的范围后,注解的驱动也就有了。
实验一,bean的创建,因为spring容器对于bean创建的四个注解是等效,这里我们使用@Component这个注解
Student类:
@Component
public class Student { public Student(){
System.out.println("spring容器调用Student类的无参构造器");
}
测试类:
public class MyTest {
public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("spring-bean.xml"); } }
实验结果:![]()
实验二:bean属性为String类型及基本数据类型的的依赖注入
student类:
@Component(value = "student")
public class Student { @Value("张三")
private String name;
@Value("23")
private int age; public String getName() {
return name;
} public int getAge() {
return age;
}
}
在这里 @Component(value = "student") value指定的是bean的id,另外对于注解方式实现的依赖注入,bean的属性无需再提供setter方法。
测试类:
public class MyTest {
public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("spring-bean.xml"); Student student = (Student)ac.getBean("student");
System.out.println(student.getName());
System.out.println(student.getAge());
} }
实验结果:
实验三:bean属性为java对象的依赖注入。
对于bean属性为java对象的依赖注入,分为两种一种是byName类型的,一种是byType类型的。而使用的注解分别是@Autowired和@Resource,对于byType类型的两者的使用没有区别,但是对于byName类型的@Autowired要使用联合注解@Qualifier,所以说使用@Resource较为简单。这里我们在研究对于bean属性为java对象的依赖注入时就使用@Resource这个注解了。
实验3.1:按照byName类型对bean属性为java对象的依赖注入。
上个实验中的Student类保持不变,再提供一个Teacher类。
@Component("teacher")
public class Teacher { @Resource(name = "student")
private Student student; public Student getStudent() {
return student;
}
}
测试类:
public class MyTest {
public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("spring-bean.xml");
Teacher teacher = (Teacher)ac.getBean("teacher");
System.out.println(teacher.getStudent().getName());
System.out.println(teacher.getStudent().getAge());
} }
实验结果:
实验3.2:按照byType类型对bean属性为java对象的依赖注入。
对于这种方式的依赖注入,只需分别修改Student类和Teacher类。
@Component
public class Student { @Value("张三")
private String name;
@Value("23")
@Qualifier
private int age; public String getName() {
return name;
} public int getAge() {
return age;
}
}
@Component("teacher")
public class Teacher { @Resource
private Student student; public Student getStudent() {
return student;
}
}
当然在这里Student类的id也是可以保留的,这里这么做是为了说明问题。实验结果同上。
最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。
spring4——IOC之基于注解的依赖注入(DI )的更多相关文章
- 07 Spring框架 依赖注入(四)基于注解的依赖注入
前面几节我们都在使用xml进行依赖的注入,但是在实际的开发中我们往往偏爱于使用注解进行依赖注入,因为这样更符合我们人的思维,并且更加快捷,本节就来讲述Spring基于注解的依赖注入: 信息注入注解 @ ...
- spring3——IOC之基于XML的依赖注入(DI )
我们知道spring容器的作用是负责对象的创建和对象间关系的维护,在上一篇博客中我们讲到spring容器会先调用对象的无参构造方法创建一个空值对象,那么接下来容器就会对对象的属性进行初始化,这个初始化 ...
- Spring:基于注解的依赖注入的使用
1.什么是pojo?什么是bean? 首先,在之前几篇Spring的介绍文章当中,自己都提到了一个名词叫做POJO类,但是在回顾Spring的注解的使用的时候,去形容java当中的对象还有一个名词是叫 ...
- Java开发学习(十二)----基于注解开发依赖注入
Spring为了使用注解简化开发,并没有提供构造函数注入.setter注入对应的注解,只提供了自动装配的注解实现. 1.环境准备 首先准备环境: 创建一个Maven项目 pom.xml添加Spring ...
- 【学习笔记】 使用XML配置和注解实现Spring的依赖注入DI (2-3-2)
Spring的四个核心组件 1.beans Bean是包装应用程序自定义对象Object的 Object中保存数据 2.core 3.context 一个Bean的关系集合 4.expression ...
- 20181123_控制反转(IOC)和依赖注入(DI)
一. 控制反转和依赖注入: 控制反转的前提, 是依赖倒置原则, 系统架构时,高层模块不应该依赖于低层模块,二者通过抽象来依赖 (依赖抽象,而不是细节) 如果要想做到控制反转(IOC), 就必须要使 ...
- 依赖倒置原则DIP&控制反转IOC&依赖注入DI
依赖倒置原则DIP是软件设计里一个重要的设计思想,它规定上层不依赖下层而是共同依赖抽象接口,通常可以是上层提供接口,然后下层实现接口,上下层之间通过接口完全透明交互.这样的好处,上层不会因依赖的下层修 ...
- 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory
spring Ioc依赖注入控制反转 事实上这个东西很好理解的,并非那么的复杂. 当某个Java对象,须要调用还有一个Java对象的时候(被依赖的对象)的方法时.曾经我们的做法是怎么做呢?主动的去创建 ...
- 浅析“依赖注入(DI)/控制反转(IOC)”的实现思路
开始学习Spring的时候,对依赖注入(DI)——也叫控制反转(IOC)—— 的理解不是很深刻.随着学习的深入,也逐渐有了自己的认识,在此记录,也希望能帮助其他入门同学更深入地理解Spring.本文不 ...
随机推荐
- Problem : 1412 ( {A} + {B} )
//集合中元素是不会重复的,所以完全没有必要将两个集合合并后再进行排序,交换排序的时间效率是O(n^2),将两个集合中的元素分别排序后输出即可.输出格式也非常需要 //注意的.输出一列元素赢以cout ...
- Could not get dialect instance.
一般此错误都是和数据库有关,请确认数据库配置文件是否配置正确,或者确认数据库是否连接正常
- puppet客户端拉取服务端的资源时报错
2017-11-01 16:21:47 客户端再拉取服务端的配置的资源时,出现一下报错: 造成原因:服务配置的资源不可用: 解决办法:将服务端不正确的资源配置删除: master: cd ...
- python初识(一)
python语言的发展 python语言诞生于1990年,由Guido van Rossum设计并领导开发. 1989年12月,Guido为打发圣诞节时间而开发的项目. python名字的由来,由于当 ...
- Flask入门HelloWorld
Flask入门HelloWorld Flask官网:http://flask.pocoo.org/ Flask中文翻译:http://dormousehole.readthedocs.io/en/la ...
- Linux find用法
Linux中find常见用法示例 ----摘抄哪里忘记了 ·find path -option [ -print ] [ -exec -ok command ] {} ...
- Win32 API之绘图函数
AbortPath 抛弃选入指定设备场景中的所有路径.也取消目前正在进行的任何路径的创建工作 AngleArc 用一个连接弧画一条线 Arc 画一个圆弧 BeginPath 启动一个路径分支 Canc ...
- Eclipse设置新建jsp文件默认模板
没有需求就没有进步,遇到问题:现在有大量的html模板页面,但是这些模板是不能和后台进行数据交互的,所以要把他们通通变成jsp页面(59个html文件),还有就是html文件转换成jsp文件的时候,前 ...
- Factorials
Factorials 阶乘 题目大意:给你一个数n,求出n ! 的最后一个非零位. 注释:n<=4200 想法:开始的想法是觉得这道题应该比较的有趣,因为我们知道,一个数的阶乘的最后的非零位后面 ...
- HTTP缓存带来的“bug”--HTTP 协议 Cache-Control
问题描述 先说背景.网站是用PHP开发的,未用任何框架,代码结构也非常简单.运行于阿里云服务器,并采用其CDN来做分发.根据业务需求,有的页面会判断用户浏览器类型,依此来选择PC或者手机端内容. 在一 ...