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 ...
随机推荐
- jquery文字填写自动高度
下面开始写一个jquery插件 (function($){ $.fn.autoTextarea = function(options) { var defaults={ maxHeight:null, ...
- 【网络文摘】Androidguy:当你的才华还无法撑起你的野心时,那么应该静下心来学习
[序] 2013年12月初,接到51CTO的邀请写一篇关于挨踢人物传记的邀请.尽管写文章对我已不是什么新鲜事.数年来写的书和博客至少也在600万字以上.不过基本都是与技术有关的.写传记这还是头一次,也 ...
- TextView跑步灯效果及在特殊情况下无效的解决方式
概述: 关于在TextView中使用跑马灯效果的样例在网上一搜一大把.他们可能会让你像以下这样来在xml中定义TextView控件的属性.而事实也确是如此. 只是我不知道他们有没有遇到和我一样的问题( ...
- NYOJ 113 字符串替换(C++STL解法)
字符串替换 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描写叙述 编写一个程序实现将字符串中的全部"you"替换成"we& ...
- 带"叉叉"的GridView
由于需要用到“删除图片”的功能,需要写这样一个小demo: 对之前博文的修改 发现imageView监听点击事件 效果实在不敢恭维,因此换个方式:设置Touch的监听函数, 下面的Demo没有改过来哈 ...
- Java AES 加密工具类
package com.microwisdom.utils; import java.security.NoSuchAlgorithmException; import java.security.S ...
- Linux 驱动之内核定时器
1.定时器 之前说过两类跟时间相关的内核结构. 1.延时:通过忙等待或者睡眠机制实现延时. 2.tasklet和工作队列,通过某种机制使工作推后运行,但不知道运行的详细时间. 接下来要介绍的定时器,可 ...
- visudo精确用户赋权(sudo)
原文BLOG:http://iminmin.blog.51cto.com/689308/455992 sudo" 是Unix/Linux平台上的一个非常有用的工具,允许为非根用户赋予一些合理 ...
- 【Linux】echo命令
用途 echo是用于终端打印的基本命令 说明 只需要使用带双引号的文本,结合echo命令就可以将文本打印在终端. [root@localhost test]# echo "Hello Wor ...
- try/except/else语句
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python学习手册 868 #try/except/else语句 #try语句分句形式 except: # ...