博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring 04-Spring框架依赖注入基本使用
阅读量:4337 次
发布时间:2019-06-07

本文共 4704 字,大约阅读时间需要 15 分钟。

  • Spring的依赖注入形式实际上所有对象产生控制都要通过applicationContext.xml文件实现
  • 依赖注入必须启动容器后才可以进行该配置文件的内部的加载操作

依赖注入之有参构造

定义一个Dept类

package cn.liang.vo;import java.util.List;public class Dept {  private Integer deptno ;  private String dname ;   private String loc ;  public Dept(Integer deptno, String dname, String loc) {      super();      this.deptno = deptno;      this.dname = dname;      this.loc = loc;  }  public Integer getDeptno() {      return deptno;  }  public void setDeptno(Integer deptno) {      this.deptno = deptno;  }  public String getDname() {      return dname;  }  public void setDname(String dname) {      this.dname = dname;  }  public String getLoc() {      return loc;  }  public void setLoc(String loc) {      this.loc = loc;  }  @Override  public String toString() {      return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";  }  }

修改applicationContext.xml文件,进行Dept类对象的定义

测试程序

  • 通过id(dept)取得Dept类对象时,自动调用构造方法,并将以上参数进行传递控制
package cn.liang.test;import org.apache.log4j.Logger;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.liang.vo.Dept;import junit.framework.TestCase;public class TestMessageService2 {  private static ApplicationContext ctx = null ;  static {      ctx = new ClassPathXmlApplicationContext("applicationContext.xml");  }  @Test  public void testDeptConstructor() {      Dept dept = (Dept) ctx.getBean("dept",Dept.class) ;      Logger.getLogger(TestMessageService.class).info(dept);   }}

输出结果

2018-11-29 16:09:19,557 INFO [cn.liang.test.TestMessageService] - Dept [deptno=10, dname=Development department, loc=Guangzhou]

依赖注入之无参构造

定义一个Dept类

package cn.liang.vo;import java.util.List;public class Dept {  private Integer deptno ;  private String dname ;   private String loc ;  public Integer getDeptno() {      return deptno;  }  public void setDeptno(Integer deptno) {      this.deptno = deptno;  }  public String getDname() {      return dname;  }  public void setDname(String dname) {      this.dname = dname;  }  public String getLoc() {      return loc;  }  public void setLoc(String loc) {      this.loc = loc;  }  @Override  public String toString() {      return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";  }  }

修改applicationContext.xml文件,进行Dept类对象的定义

  • property调用的是类中的属性
  • 当明确指定了value属性设置内容,容器会自动调用setter方法

测试程序testDeptConstructor,输出结果

2018-11-29 16:10:32,128 INFO [cn.liang.test.TestMessageService] - Dept [deptno=10, dname=Development department, loc=Guangzhou]

依赖注入之引用操作

定义一个Emp类

package cn.liang.vo;public class Emp {  private Integer empno ;  private String ename ;  private Double sal ;  private Dept dept ;  public Integer getEmpno() {      return empno;  }  public void setEmpno(Integer empno) {      this.empno = empno;  }  public String getEname() {      return ename;  }  public void setEname(String ename) {      this.ename = ename;  }  public Double getSal() {      return sal;  }  public void setSal(Double sal) {      this.sal = sal;  }  public Dept getDept() {      return dept;  }  public void setDept(Dept dept) {      this.dept = dept;  }  @Override  public String toString() {      return "Emp [empno=" + empno + ", ename=" + ename + ", sal=" + sal + ", dept=" + dept + "]";  }}

修改applicationContext.xml文件,进行Dept类和Emp类对象的定义

  • 本次操作通过Emp找到Dept的关系,使用属性ref

测试程序

package cn.liang.test;import org.apache.log4j.Logger;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.liang.vo.Dept;import cn.liang.vo.Emp;import junit.framework.TestCase;public class TestMessageService2 {  private static ApplicationContext ctx = null ;  static {    // 静态代码块优先于所有的代码执行,目的是为了静态属性初始化      ctx = new ClassPathXmlApplicationContext("applicationContext.xml");  }  @Test  public void testEmpConstructor() {      Emp emp = (Emp) ctx.getBean("emp",Emp.class) ;      Logger.getLogger(TestMessageService.class).info(emp);   }}

输出结果

2018-11-29 16:23:05,418 INFO [cn.liang.test.TestMessageService] - Emp [empno=1234, ename=Liang, sal=18000.0, dept=Dept [deptno=10, dname=Development department, loc=Guangzhou]]

依赖注入之p命名空间操作

  • p命名空间的核心本质是能通过一行配置就可以解决多行问题

主要核心配置

xmlns:p="http://www.springframework.org/schema/p"

主要语法

测试程序testEmpConstructor,输出结果

2018-11-29 16:28:41,085 INFO [cn.liang.test.TestMessageService] - Emp [empno=1234, ename=Liang, sal=18000.0, dept=Dept [deptno=10, dname=Development department, loc=Guangzhou]]

转载于:https://www.cnblogs.com/liangjingfu/p/10039314.html

你可能感兴趣的文章
二次剩余及欧拉准则
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>
UIView的layoutSubviews,initWithFrame,initWithCoder方法
查看>>
STM32+IAP方案 实现网络升级应用固件
查看>>
用74HC165读8个按键状态
查看>>
jpg转bmp(使用libjpeg)
查看>>
linear-gradient常用实现效果
查看>>
sql语言的一大类 DML 数据的操纵语言
查看>>
VMware黑屏解决方法
查看>>
JS中各种跳转解析
查看>>
JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
查看>>
Ecust OJ
查看>>
P3384 【模板】树链剖分
查看>>
Thrift源码分析(二)-- 协议和编解码
查看>>
考勤系统之计算工作小时数
查看>>
4.1 分解条件式
查看>>
Equivalent Strings
查看>>
flume handler
查看>>
收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
查看>>