Spring的三种注入方式(Setter、构造函数和自动注入)
一、Setter注入
这里我是希望在Student.java中调用Course.java中的内容。
public class Course {
public String name = "数学";}
Course类很简单只是定义了一个name并赋值了"数学"。
public class Student {
//Student就是注入的目的地,Course是被注入的对象
//想要在Student中使用Course类
private Course course;
//如何注入简单类型
private int age;
private String name;
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
//setter方式注入一定要生成set方法
public void setCourse(Course course) {
this.course = course;
}
public void shangke (){
System.out.println(age+"岁学生"+name+"正在上"+course.name+"课");
}
}
这是Student类,创建了一个Course类,并生成了set方法
以上步骤完成之后就是怎么把这两者关联起来了
这就要在配置文件中applicationContext.xml文件中配置相应的bean了
<bean id="course" class="com.niit.DI.Course"></bean>
<bean id="student" class="com.niit.DI.Student">
<!-- 以下代码跟Student类中的set方法相关 -->
<!-- name就写Student中被注入变量的名称 -->
<!-- ref代表spring会按照course为模板去new一个course并赋值到course中 -->
<property name="course" ref="course" ></property>
<property name="age" value="20"></property>
<property name="name" value="biu"></property>
</bean>
这样一个简单的set方式注入就完成了!
二、构造函数注入
为了方便操作,这里我们依旧使用Course类作为注入的对象。往Teacher类中注入
Course类。
public class Teacher {
//也要在Teacher类里面访问Course类
private Course course;
private int age;
private String name;
//使用构造函数
public Teacher(Course course,int age,String name){
this.course = course;
this.age = age;
this.name = name;
}
public void shangke(){
System.out.println("老师正在给"+age+"岁的"+name+"上"+course.name+"课");
}
}
这是Teacher类中的内容这里使用了一个构造函数Teacher。
配置文件中的内容实现注入
<bean id="teacher" class="com.niit.DI2.Teacher">
<!-- 构造函数方式注入的时候必须配置构造函数的参数 -->
<constructor-arg name="course" ref="course"></constructor-arg>
<constructor-arg name="age" value="20"></constructor-arg>
<constructor-arg name="name" value="liu"></constructor-arg>
</bean>
是不是很简单,一下就完成后了!
三、自动注入
依旧使用Course类,这次是要把Course丢给Person类。
自动注入的时候使用Set方法和构造函数的方法都行,看个人喜好了,官方是更推荐构造函数的方法来进行注入的。这里使用的是setter方式注入
public class Person {
Course course;
public void setCourse(Course course) {
this.course = course;
}
public void shangke(){
System.out.println("有人正在上"+course.name+"课");
}
}
配置文件中的配置
<!-- 自动注入 --> <bean id="course" class="com.niit.DI.Course"></bean> <bean id="person" class="com.niit.DI3.Person" autowire="byName"> </bean>
这里的autowire属性稍微做下笔记
byName 从配置文件中查找跟被注入属性名称相同的been
byType 按照被注入属性的类型从配置文件中查找跟被注入属性相同的类型
注意:返回多个会异常
default
constructor 按照构造函数参数的方法去查找
三种注入的方式全部完成了是不是觉得很简单!
Spring的三种注入方式(Setter、构造函数和自动注入)的更多相关文章
- Spring bean三种创建方式
spring共提供了三种实例化bean的方式:构造器实例化(全类名,反射).工厂方法(静态工厂实例化 动态工厂实例化)和FactoryBean ,下面一一详解: 1.构造器实例化 City.jav ...
- Spring事务-三种实现方式
一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- Spring MVC三种返回方式
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. 下面一一进行说明: 1.ModelAndV ...
- spring ioc三种注入方式
spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...
- Spring IOC 三种注入方式
1. 接口注入 2. setter注入 3. 构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...
- Spring的三种通过XML实现DataSource注入方式
Spring的三种通过XML实现DataSource注入方式: 1.使用Spring自带的DriverManagerDataSource 2.使用DBCP连接池 3.使用Tomcat提供的JNDI
- Spring中三种配置Bean的方式
Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...
- 【转】Spring 中三种Bean配置方式比较
今天被问到Spring中Bean的配置方式,很尴尬,只想到了基于XML的配置方式,其他的一时想不起来了,看来Spring的内容还没有完全梳理清楚,见到一篇不错的文章,就先转过来了. 以前Java框架基 ...
- Spring 中三种Bean配置方式比较
今天被问到Spring中Bean的配置方式,很尴尬,只想到了基于XML的配置方式,其他的一时想不起来了,看来Spring的内容还没有完全梳理清楚,见到一篇不错的文章,就先转过来了. 以前Java框架基 ...
- (转)Spring的三种实例化Bean的方式
http://blog.csdn.net/yerenyuan_pku/article/details/52832793 Spring提供了三种实例化Bean的方式. 使用类构造器实例化. <be ...
随机推荐
- C++类型转换的经典例子
- Faiss学习:一
在多个GPU上运行Faiss以及性能测试 一.Faiss的基本使用 1.1在CPU上运行 Faiss的所有算法都是围绕index展开的.不管运行搜索还是聚类,首先都要建立一个index. import ...
- 【Nodejs】“快算24”扑克牌游戏算法 1.01
考虑到1.00版本需要改源码变更四个数字,这版修改了一下变成控制台输入了. 先把两个数四则运算得到结果想清楚就是C2代码,三个数就是C3,四个数就是C4.简单的代码简单,却是复杂的基础:复杂的脱胎于简 ...
- html5游戏驴子跳
在线演示 免费下载 分享一款HTML5开发的游戏,放松一下吧大家吧
- PyQt5教程——事件和信号(5)
PyQt5中的事件和信号 在这部分PyQt5编程教程中,我们探索应用中事件和信号的发生. 事件 所有的GUI应用都是事件驱动的.事件主要由应用的用户操作产生的.但是事件可能由其他条件触发,比如:一个网 ...
- 算法笔记_210:第六届蓝桥杯软件类决赛真题(Java语言C组)
目录 1 机器人数目 2 生成回文数 3 空心菱形 4 奇怪的数列 5 密文搜索 6 居民集会 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 机器人数目 标题:机器人数目 少年宫新近邮购了小机器人 ...
- 算法笔记_185:历届试题 格子刷油漆(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可 ...
- 算法笔记_177:历届试题 城市建设(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修.市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他. C市中有 ...
- KeyBoardUtils.java——android键盘工具类
package com.xdsjs.save.utils; import android.content.Context; import android.view.inputmethod.InputM ...
- 【Oracle】RAC 10.2.0.1升级10.2.0.5
环境: OS:OEL5.6 RAC:10.2.0.1.0 相关环境变量: CRS_HOME /u01/app/oracle/product/10.2.0/db_1 ORACLE_HOME /u01 ...