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 ...
随机推荐
- 如何在程序中使用CString
在新建项目的时候,如果选择了MFC并且使用ATL,那么在程序中使用CString是没有问题的. 但是如果当初没有选,后面再改,虽然选上了,但是CString在编译的时候还是不被编译器识别.怎么办那? ...
- UVA 10090 Marbles(扩展欧几里得)
Marbles Input: standard input Output: standard output I have some (say, n) marbles (small glass ball ...
- com.esotericsoftware.kryo.kryoexception java.util.ConcurentModificationException
近期 有网友看我的"整合Kafka到Spark Streaming--代码演示样例和挑战"文章, 讲 kafka对象 放到 pool 并通过broadcast广播出去: 然后 在开 ...
- iOS \U7ea2 乱码 转换
通常网络请求的数据,如果不做处理在输出时显示是 \U 之类的编码的: 不需要导入别的类库解决方法 - (NSString *)replaceUnicode:(NSString *)unicodeStr ...
- java多线程解决应用挂死的问题
这两天为了定位JBOSS老是挂死的问题,学习了一下JAVA多线程方面的知识,在此总结一下 1.在Java程序中,JVM负责线程的调度.线程调度是指按照特定的机制为多个线程分配CPU的使用权. 调度的模 ...
- vue 钩子函数 使用async await
示例: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <tit ...
- 解决vsftpd乱码
不管是中文环境还是英文环境,需要改的地方如下: /etc/sysconfig/i18n 其内容改为: LANG="zh_CN.GB2312"SYSFONT="latarc ...
- JavaWeb get请求乱码处理
乱码终极解决方案 Author:Marydon 一.安装好eclipse/myeclipse后,先将开发环境改成UTF-8; 更改工作空间编码方式 window-->preferences- ...
- ORACLE-SQL(二)
CreateTime--2017年6月1日14:36:37 Author:Marydon 一.SQL语句 (二)提升篇 1.2.3 分页,分组,计数,排序 /** * 返回数据 * FORGID ...
- spyder python 相关
1.python开发集成工具Spyder中,如何设置变量成员提示和代码补全呢? 答: pip install rope,安装好rope 就可以了 2.最常用的是:tap的制动补全 (IPython c ...