Spring中,如何给对象的属性赋值?  【DI, 依赖注入】

1) 通过构造函数

2) 通过set方法给属性注入值

3) p名称空间

    4)自动装配(了解)

5) 注解


  1. package loaderman.c_property;
  2.  
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6.  
  7. public class App {
  8.  
  9. // 创建容器对象
  10. private ApplicationContext ac = new ClassPathXmlApplicationContext("loaderman/c_property/bean.xml");
  11.  
  12. @Test
  13. public void testSet() {
  14. // 从容器中获取
  15. User user = (User) ac.getBean("user");
  16.  
  17. System.out.println(user);
  18. }
  19.  
  20. @Test
  21. public void testExecuteAction() {
  22. // 从容器中获取Action
  23. UserAction userAction = (UserAction) ac.getBean("userAction");
  24. userAction.execute();
  25.  
  26. }
  27. }
  1. package loaderman.c_property;
  2.  
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6.  
  7. public class App_p {
  8.  
  9. // 创建容器对象
  10. private ApplicationContext ac = new ClassPathXmlApplicationContext("loaderman/c_property/bean_p.xml");
  11.  
  12. @Test
  13. public void testExecuteAction() {
  14. // 从容器中获取Action
  15. UserAction userAction = (UserAction) ac.getBean("userAction");
  16. userAction.execute();
  17.  
  18. System.out.println(ac.getBean("user"));
  19. }
  20. }
  1. package loaderman.c_property;
  2.  
  3. public class User {
  4.  
  5. private int id;
  6. private String name;
  7.  
  8. ////////////////// --> 通过容器注入属性值
  9. public void setId(int id) {
  10. this.id = id;
  11. }
  12. // //--> 通过容器注入属性值
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16.  
  17. ////////////////
  18. public int getId() {
  19. return id;
  20. }
  21.  
  22. public String getName() {
  23. return name;
  24. }
  25.  
  26. @Override
  27. public String toString() {
  28. return "User [id=" + id + ", name=" + name + "]";
  29. }
  30.  
  31. public User() {
  32. super();
  33. System.out.println("------User对象创建【无参数构造器】------");
  34. }
  35.  
  36. public User(int id, String name) {
  37. System.out.println("-----User对象创建【带参数构造器】--------");
  38. this.id = id;
  39. this.name = name;
  40. }
  41.  
  42. public void init_user() {
  43. System.out.println("创建对象之后,初始化");
  44. }
  45. public void destroy_user() {
  46. System.out.println("IOC容器销毁,user对象回收!");
  47. }
  48.  
  49. }
  1. package loaderman.c_property;
  2.  
  3. public class UserAction {
  4.  
  5. // Service: springIOC容器注入
  6. private UserService userService;
  7. public void setUserService(UserService userService) {
  8. this.userService = userService;
  9. }
  10.  
  11. public String execute() {
  12. userService.save();
  13. return null;
  14. }
  15. }
  1. package loaderman.c_property;
  2.  
  3. public class UserDao {
  4.  
  5. public void save() {
  6. System.out.println("DB:保存用户");
  7. }
  8. }
  1. package loaderman.c_property;
  2.  
  3. public class UserService {
  4.  
  5. private UserDao userDao; // = new UserDao();
  6.  
  7. // IOC:对象的创建交给spring的外部容器完成
  8. public void setUserDao(UserDao userDao) {
  9. this.userDao = userDao;
  10. }
  11.  
  12. public void save() {
  13. userDao.save();
  14. }
  15. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context.xsd">
  11.  
  12. <!-- ###############对象属性赋值############### -->
  13. <!-- 1) 通过构造函数 -->
  14. <bean id="user1" class="loaderman.c_property.User" scope="prototype">
  15. <constructor-arg value="100"></constructor-arg>
  16. <constructor-arg value="Tom"></constructor-arg>
  17. </bean>
  18.  
  19. <!-- 2) 通过set方法给属性注入值 -->
  20. <bean id="user" class="loaderman.c_property.User" scope="prototype">
  21. <property name="id" value="101"></property>
  22. <property name="name" value="Jack"></property>
  23. </bean>
  24.  
  25. <!--
  26. 案例:
  27. action/service/dao
  28. -->
  29. <!-- dao instance -->
  30. <bean id="userDao" class="loaderman.c_property.UserDao"></bean>
  31.  
  32. <!-- service instance -->
  33. <bean id="userService" class="loaderman.c_property.UserService">
  34. <property name="userDao" ref="userDao"></property>
  35. </bean>
  36.  
  37. <!-- action instance -->
  38. <bean id="userAction1" class="loaderman.c_property.UserAction">
  39. <property name="userService" ref="userService"></property>
  40. </bean>
  41.  
  42. <!-- ##############内部bean############## -->
  43. <bean id="userAction2" class="loaderman.c_property.UserAction">
  44. <property name="userService">
  45. <bean class="loaderman.c_property.UserService">
  46. <property name="userDao">
  47. <bean class="loaderman.c_property.UserDao"></bean>
  48. </property>
  49. </bean>
  50. </property>
  51. </bean>
  52. <!--
  53. 给对象属性注入值:
  54. # p 名称空间给对象的属性注入值
  55. (spring3.0以上版本才支持)
  56. -->
  57. </beans>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context.xsd">
  11.  
  12. <!-- ###############对象属性赋值############### -->
  13.  
  14. <!--
  15. 给对象属性注入值:
  16. # p 名称空间给对象的属性注入值
  17. (spring3.0以上版本才支持)
  18. -->
  19. <bean id="userDao" class="loaderman.c_property.UserDao"></bean>
  20.  
  21. <bean id="userService" class="loaderman.c_property.UserService" p:userDao-ref="userDao"></bean>
  22.  
  23. <bean id="userAction" class="loaderman.c_property.UserAction" p:userService-ref="userService"></bean>
  24.  
  25. <!-- 传统的注入:
  26. <bean id="user" class="cn.loaderman.c_property.User" >
  27. <property name="name" value="xxx"></property>
  28. </bean>
  29. -->
  30. <!-- p名称空间优化后 -->
  31. <bean id="user" class="loaderman.c_property.User" p:name="Jack0001"></bean>
  32.  
  33. </beans>

Spring对象依赖关系的更多相关文章

  1. Spring对象依赖关系处理

    Spring中给对象属性赋值 1.通过set方法给属性注入值 2.p名称空间 3.自动装配 4.注解 编写MVCModel调用userAction MVCModel public class MVCM ...

  2. Java进阶知识18 Spring对象依赖关系的几种写法

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  3. Spring IOC、对象依赖关系

    Spring IOC.对象依赖关系   2016-09-21 01:36 414人阅读 评论(0) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博主允许不得转载. 引入 Strut ...

  4. 在SQL Server中查看对象依赖关系

    原文 在SQL Server中查看对象依赖关系 Viewing object dependencies in SQL Server   Deleting or changing objects may ...

  5. Spring之对象依赖关系(依赖注入Dependency Injection)

    承接上篇: Spring中,如何给对象的属性赋值: 1:通过构造函数,如下所示: <!-- 1:构造函数赋初始值 --><bean id="user1" clas ...

  6. Spring第三篇【Core模块之对象依赖】

    前言 在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容 ...

  7. spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象

    相关 知识 >>> 相关 练习 >>> 实现要求: 在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXm ...

  8. Spring 3.x jar 包详解 与 依赖关系

    以下的内容我会持续更新(当然是我有新发现的时候); 以下内容是我在网上搜索.整理.修改的而成的内容.由于很多内容都是转载了,无法追溯到源头,因此无法一一对原作者进行道谢. 这几天,我查阅大量的官方的文 ...

  9. Spring框架学习之高级依赖关系配置(一)

    上篇文章我们对Spring做了初步的学习,了解了基本的依赖注入思想.学会简单的配置bean.能够使用Spring容器管理我们的bean实例等.但这还只是相对较浅显的内容,本篇将介绍bean的相关更高级 ...

随机推荐

  1. JS__POST

    RSA加密 熟悉的东西 public key Encrypt (函数) 而且 每次刷新都会变化() 一般 128 位,也有 256位的

  2. JavaSpring【二、IOC】

    概述: 接口及面向接口编程 接口:用于沟通的中介物的抽象,实体把自己提供给外界的方法的抽象化说明,将声明和实现分离,使其能够改变内部而不影响与外部的交互方式 面向接口编程:在结构设计中,分清层次及调用 ...

  3. Django—model系统:ORM对数据库操作

    基本操作 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): ...

  4. Vue介绍:vue导读3

    一.全局组件 二.父组件传递信息给子组件 三.子组件传递信息给父组件 四.vue项目开发 一.全局组件 <body> <!-- 两个全局vue实例可以不用注册全局组件,就可以使用 - ...

  5. web开发:形变、表格及多行文本操作

    一.2d形变 二.动画 三.表格 四.多个文本垂直居中 五.小米形变案例 一.2d形变 /*1.形变参考点: 三轴交界点*/transform-origin: x轴坐标 y轴坐标; /*2.旋转 ro ...

  6. Sublime text3安装

    一.Sublime text3下载 [20190506]下载 官网下载:https://www.sublimetext.com/ https://download.sublimetext.com/Su ...

  7. [Abp vNext微服务实践] - 启动流程

    前几篇分别介绍了abp vNext微服务框架和微服务CI/CD环境搭建,本篇开始介绍vNext微服务框架的开发环境搭建. 环境准备 官方介绍的系统架构图如下: 上图中身份服务和网关服务已经集成在系统中 ...

  8. PAT Basic 1072 开学寄语 (20 分)

      下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读书.锻炼.明智. ...

  9. 前端自动化构建工具 Webpack——3 webpack配置文件的使用

  10. Java入门第二季——Java中的this关键字

    如果想访问一个private属性,通常会使用setter和getter方法来操作属性,属性名经常会与参数名相同,我们为了区分属性和参数的概念,我们会在属性前面加上this关键字,此时代表我将一个参数的 ...