Spring学习(二)三种方式的依赖注入
1、前言
上一篇讲到第一个Spring项目的创建、以及bean的注入、当然、注入的方式一共有三种、本文将展开细说。
1、set注入:本质是通过set方法赋值
1、创建老师类和课程类
1、Course
package com.feng.entity;
public class Course {
private String courseName;
private int courseHour;
private Teacher teacher; // 授课老师、依赖于Teacher类
public Course(String courseName, int courseHour, Teacher teacher) {
this.courseName = courseName;
this.courseHour = courseHour;
this.teacher = teacher;
}
public Course() {
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public int getCourseHour() {
return courseHour;
}
public void setCourseHour(int courseHour) {
this.courseHour = courseHour;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public void showInfo() {
System.out.println(this.courseName + "," + this.courseHour + "," + this.teacher.getName());
}
}
2、Teacher
package com.feng.entity;
public class Teacher {
private String name;
private int age;
public Teacher(String name, int age) {
this.name = name;
this.age = age;
}
public Teacher() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2、配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="teacher" class="com.feng.entity.Teacher">
<property name="name" value="zs"></property>
<property name="age" value="23"></property>
</bean>
<bean id="course" class="com.feng.entity.Course">
<!-- 1、set注入:通过set方法赋值 -->
<!--本质就是调用setCourseName()方法
CourseName -> setCourseName()借助反射进行查找
-->
<property name="courseName" value="java"></property>
<property name="courseHour" value="200"></property>
<!-- 将teacher对象注入到course对象中 -->
<property name="teacher" ref="teacher"></property>
</bean>
</beans>
3、测试类测试
package com.feng.test;
import com.feng.entity.Course;
import com.feng.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void testDI() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Course course = (Course)context.getBean("course");
course.showInfo();
}
public static void main(String[] args) {
testDI();
}
}
4、运行结果
5、注
这里只需要获得course对象即可、因为course对象中包含Teacher。这里注意不用value用ref、因为这里指向的是一个对象。
<property name="teacher" ref="teacher"></property>
2、构造器注入: 本质是通过构造方法赋值
1、改变applicationContext.xml即可、其他的无需变动
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="teacher" class="com.feng.entity.Teacher">
<!--2、构造器注入:通过构造方法赋值-->
<constructor-arg value="24" name="age"></constructor-arg>
<constructor-arg value="ls" name="name"></constructor-arg>
</bean>
<bean id="course" class="com.feng.entity.Course">
<constructor-arg value="c" name="courseName"></constructor-arg>
<constructor-arg value="100" name="courseHour"></constructor-arg>
<constructor-arg ref="teacher" name="teacher"></constructor-arg>
</bean>
</bean>
2、运行结果
3、注
这里注意使用构造器注入、原来的实体类中必须要有构造器方法、标签中最好指定name,不然会按构造方法中的顺序去检索参数,如果类型值出错就容易导致程序报错运行不起来。
3、增加p命名空间
1、改变applicationContext.xml即可、其他的无需变动
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<!--使用p命名空间记得加这句话-->
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="teacher" class="com.feng.entity.Teacher" p:age="25" p:name="w5">
</bean>
<bean id="course" class="com.feng.entity.Course" p:courseHour="300" p:courseName="hadop" p:teacher-ref="teacher">
</bean>
</bean>
2、运行结果
2、总结
本文讲到了Spring框架中applicationContext.xml中bean依赖注入的三种方式、下一篇文章会围绕几种集合方式的注入进行讲解。
Spring学习(二)三种方式的依赖注入的更多相关文章
- spring配置datasource三种方式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp34 spring配置datasource三种方式 1.使用org.spri ...
- spring配置datasource三种方式及具体信息
1.使用org.springframework.jdbc.datasource.DriverManagerDataSource说明:DriverManagerDataSource建立连接是只要有连接就 ...
- spring配置datasource三种方式 数据库连接池
尊重原创(原文链接):http://blog.csdn.net/kunkun378263/article/details/8506355 1.使用org.springframework.jdbc.da ...
- spring实例化bean三种方式
我看了这篇博文<https://www.cnblogs.com/zhanglei93/p/6221546.html>,以及自己实践总结了关于spring实例化bean对象的3种方式. 一. ...
- Spring笔记03(Spring创建对象的三种方式)
1.创建对象的三种方式和bean的生命周期的验证: Animal接口代码: package cn.pb.dao; /** * 动物接口 */ public interface Animal { //吃 ...
- Spring创建对象的三种方式以及创建时间
创建对象的三种方式: 1.采用默认的构造函数创建 2.采用静态工厂方法 1.写一个静态工厂方法类 public class HelloWorldFactory { public static Hell ...
- Scala学习2 ———— 三种方式完成HelloWorld程序
三种方式完成HelloWorld程序 分别采用在REPL,命令行(scala脚本)和Eclipse下运行hello world. 一.Scala REPL. 按照第一篇在windows下安装好scal ...
- 创建 Spring容器的三种方式
一.src路径下打包完在war包的classes层级下 1.Spring容器创建的三种方式 创建Bean容器之后创建对象: 其中第三种使用的是BeanFactory对象 2.spring通过配置文件用 ...
- Spring集成Memcached三种方式(一)
转载:http://blog.csdn.net/u013725455/article/details/52102170 Memcached Client目前有3种: Memcached Client ...
随机推荐
- 【CSP2019】【洛谷5657】格雷码
传送门:https://www.luogu.com.cn/problem/P5657 题意不再复述: 我们知道对于每个字符1 or 0: 只要考虑当前的k在2^n的前半段还是后半段就行 这里需要注意的 ...
- Codeforces 258E - Little Elephant and Tree(根号暴力/线段树+标记永久化/主席树+标记永久化/普通线段树/可撤销线段树,hot tea)
Codeforces 题目传送门 & 洛谷题目传送门 yyq:"hot tea 不常有,做过了就不能再错过了" 似乎这是半年前某场 hb 模拟赛的 T2?当时 ycx.ym ...
- MetaboAnalyst的多组学分析
MetaboAnalyst是做代谢的R包,功能十分强大.也开发了web版本,代谢组学的分析这里不介绍,主要讲讲它开发的多组学分析的相关内容. 既然是做代谢的工具,即使是增加了多组学内容,肯定也是以代谢 ...
- a.out的由来
用过linux的都知道,在linux下编译链接程序,如果不加-o参数,生成的binary代码的名字都是默认的a.out.一不小心,a.out还会覆盖上次其他code生成的binary代码. a.out ...
- 巩固java第五天
巩固内容: HTML 实例解析 <p> 元素: <p>这是第一个段落.</p> 这个 <p> 元素定义了 HTML 文档中的一个段落. 这个元素拥有一个 ...
- Windows端口被占用解决方法
Error 场景 启动 Java 项目失败,控制台显示 Error starting ApplicationContext. To display the conditions report`re-r ...
- Linux 【复习巩固】
目录 一.网络和服务 1.查看ip 2.查看主机名 配置 3.临时服务 1)基本语法(CentOS 6) 2)基本语法(CentOS 7) 3)示例 4.开机自启动服务 1)基本语法(CentOS 6 ...
- 转 序列化Serializable和Parcelable的区别详解
什么是序列化,为什么要进行序列化 答:对象要进行传输(如:activity 与activity间 ,网络间 进程间等等).存储到本地就必须进行序列化 . 这种可传输的状态就是序列化. 怎么序列化??两 ...
- shell神器curl命令的用法 curl用法实例笔记
shell神器curl命令的用法举例,如下: ##基本用法(配合sed/awk/grep) $curl http://www.jquerycn.cn ##下载保存 $curl http://www.j ...
- SpringAOP简单例子
这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象.写这个例子的主要目标只是想让想学AOP的能更快地入门,了解一下如何去配置AOP里面的东东.目标对象的接口:IStudent.ja ...