4_Spring_XML方式实现DI

4_Spring_XML方式实现DI

spring中的Bean的管理:

Bean(汉译咖啡豆). 又称JAVABean.其实就是JAVA程序程序中的一个个对象,所以Bean的管理其实就是spring对于JAVA程序中的对象的管理

管理的内容是什么

1 对象的创建   IOC

IOC   叫做控制反转,就是Spring给我们创建对象,然后我们直接用,不用自己NEW,前面已经解释过

IOC处理的是对象如何创建的问题

2 属性的赋值   DI

DI    Dependency Injection,即“依赖注入” 就是创建属性时给对象属性赋值

对象功能的实现往往要依赖属性的值,那么给对象属性赋值就可以说成是依赖注入

由于对象属性不仅仅是基本数据类型,还可能是其他类,或者引用类型

那么依赖注入将会把更多的对象之间的关系整理到一起,可以行程一个庞大的依赖关系

DI处理的是对象的属性赋值和互相依赖的关系

spring给我们提供了两种关于bean的方式

1 基于XML方式的Bean管理

2 基于注解方式的Bean管理

创建新的模块并导入以下依赖

image
依赖

  1. org.springframework
  2. spring-context
  3. 5.3.5
  4. junit
  5. junit
  6. 4.13.1
  7. test

创建spring配置文件,一般spring的配置文件很多人约定俗称为application****.xml

image
准备一个要实例化的类

  1. public class User {
  2. private Integer userid;
  3. private String username;
  4. private String password;
  5. @Override
  6. public String toString() {
  7. return "User{" +
  8. "userid=" + userid +
  9. ", username='" + username + ''' +
  10. ", password='" + password + ''' +
  11. '}';
  12. }
  13. public User() {
  14. System.out.println("noArgConstructor");
  15. }
  16. public User(Integer userid, String username, String password) {
  17. System.out.println("allArgConstructor");
  18. this.userid = userid;
  19. this.username = username;
  20. this.password = password;
  21. }
  22. public void setUserid(Integer userid) {
  23. System.out.println("setUserid");
  24. this.userid = userid;
  25. }
  26. public void setUsername(String username) {
  27. System.out.println("setUsername");
  28. this.username = username;
  29. }
  30. public void setPassword(String password) {
  31. System.out.println("setpassword");
  32. this.password = password;
  33. }
  34. }

IOC创建对象

通过无参构造方法构造对象

标签的常见属性

id    对象的id

class 类的全路径名

name 和id类似,一般不用

scope 控制对象单例多例和使用范围

singleton作用域(scope 默认值), Spring IOC容器中只会存在一个共享的bean实例

prototype作用域部署的bean,每一次获取都会产生一个新的bean实例,相当与一个new的操作

request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效

session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义

lazy-init 懒加载 调用getBean的时候再去实例化对象

DI给对象属性赋值

1 通过set方法给对象属性赋值

2 通过有参构造给对象属性赋值

测试代码

  1. public class Test1 {
  2. @Test
  3. public void testGetBean(){
  4. ApplicationContext context =new
    ClassPathXmlApplicationContext("applicationContext.xml");
  5. User user1 = context.getBean("user1", User.class);
  6. User user2 = context.getBean("user2", User.class);
  7. User user3 = context.getBean("user3", User.class);
  8. User user4 = context.getBean("user4", User.class);
  9. User user5 = context.getBean("user5", User.class);
  10. System.out.println(user1);
  11. System.out.println(user2);
  12. System.out.println(user3);
  13. System.out.println(user4);
  14. System.out.println(user5);
  15. }
  16. }

image

4 注入空值和特殊符号

  1. ]]>

5 关于bean引用

实体类

  1. package com.msb.bean;
  2. import java.util.Date;
  3. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  4. */
  5. public class Mouse {
  6. private String name;
  7. private Date birthdate;
  8. @Override
  9. public String toString() {
  10. return "Mouse{" +
  11. "name='" + name + ''' +
  12. ", birthdate=" + birthdate +
  13. '}';
  14. }
  15. public Mouse() {
  16. }
  17. public Mouse(String name, Date birthdate) {
  18. this.name = name;
  19. this.birthdate = birthdate;
  20. }
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public Date getBirthdate() {
  28. return birthdate;
  29. }
  30. public void setBirthdate(Date birthdate) {
  31. this.birthdate = birthdate;
  32. }
  33. }
  34. package com.msb.bean;
  35. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  36. */
  37. public class Cat {
  38. private String name;
  39. private Mouse mouse1;
  40. @Override
  41. public String toString() {
  42. return "Cat{" +
  43. "name='" + name + ''' +
  44. ", mouse1=" + mouse1 +
  45. '}';
  46. }
  47. public Cat() {
  48. }
  49. public Cat(String name, Mouse mouse1) {
  50. this.name = name;
  51. this.mouse1 = mouse1;
  52. }
  53. public String getName() {
  54. return name;
  55. }
  56. public void setName(String name) {
  57. this.name = name;
  58. }
  59. public Mouse getMouse1() {
  60. return mouse1;
  61. }
  62. public void setMouse1(Mouse mouse1) {
  63. this.mouse1 = mouse1;
  64. }
  65. }

xml 配置

6 关于集合注入

实体类

  1. package com.msb.bean;
  2. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  3. */
  4. public class Book {
  5. private String bname;
  6. private String author;
  7. @Override
  8. public String toString() {
  9. return "Book{" +
  10. "bname='" + bname + ''' +
  11. ", author='" + author + ''' +
  12. '}';
  13. }
  14. public Book() {
  15. }
  16. public Book(String bname, String author) {
  17. this.bname = bname;
  18. this.author = author;
  19. }
  20. public String getBname() {
  21. return bname;
  22. }
  23. public void setBname(String bname) {
  24. this.bname = bname;
  25. }
  26. public String getAuthor() {
  27. return author;
  28. }
  29. public void setAuthor(String author) {
  30. this.author = author;
  31. }
  32. }
  33. package com.msb.bean;
  34. import java.util.Arrays;
  35. import java.util.List;
  36. import java.util.Map;
  37. import java.util.Set;
  38. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  39. */
  40. public class Student {
  41. private String[] books;
  42. private Set bookSet;
  43. private List bookList;
  44. private Map<String,String> bookMap;
  45. private List bookList2;
  46. @Override
  47. public String toString() {
  48. return "Student{" +
  49. "books=" + Arrays.toString(books) +
  50. ", bookSet=" + bookSet +
  51. ", bookList=" + bookList +
  52. ", bookMap=" + bookMap +
  53. ", bookList2=" + bookList2 +
  54. '}';
  55. }
  56. public String[] getBooks() {
  57. return books;
  58. }
  59. public void setBooks(String[] books) {
  60. this.books = books;
  61. }
  62. public Set getBookSet() {
  63. return bookSet;
  64. }
  65. public void setBookSet(Set bookSet) {
  66. this.bookSet = bookSet;
  67. }
  68. public List getBookList() {
  69. return bookList;
  70. }
  71. public void setBookList(List bookList) {
  72. this.bookList = bookList;
  73. }
  74. public Map<String, String> getBookMap() {
  75. return bookMap;
  76. }
  77. public void setBookMap(Map<String, String> bookMap) {
  78. this.bookMap = bookMap;
  79. }
  80. public List getBookList2() {
  81. return bookList2;
  82. }
  83. public void setBookList2(List bookList2) {
  84. this.bookList2 = bookList2;
  85. }
  86. public Student() {
  87. }
  88. public Student(String[] books, Set bookSet, List
    bookList, Map<String, String> bookMap, List bookList2) {
  89. this.books = books;
  90. this.bookSet = bookSet;
  91. this.bookList = bookList;
  92. this.bookMap = bookMap;
  93. this.bookList2 = bookList2;
  94. }
  95. }

配置文件

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:c="http://www.springframework.org/schema/c"
  5. xmlns:util="http://www.springframework.org/schema/util"
  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/util
  10. http://www.springframework.org/schema/util/spring-util.xsd
  11. ">
  12. <util:list id="outerbookList">
  13. </util:list>
  14. JAVA
  15. MySQL
  16. Spring
  17. JAVA
  18. MySQL
  19. Spring
  20. JAVA
  21. MySQL
  22. Spring

7 工厂方式获取bean

特点 : bean标签中定义的class类不是返回的对象的类,而是生产该对象的工厂

工厂模式:GOF 设计模式

spring中给我们定义好了一个工厂接口,可以生产对象的接口,我们可以通过工厂来获取bean

定义工厂对象 实现 FactoryBean接口

  1. package com.msb.bean;
  2. import org.springframework.beans.factory.FactoryBean;
  3. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  4. */
  5. public class BookFactory implements FactoryBean {
  6. @Override
  7. public Book getObject() throws Exception {
  8. Book book=new Book();
  9. book.setBname("JAVA");
  10. book.setAuthor("马士兵");
  11. return book;
  12. }
  13. @Override
  14. public Class<?> getObjectType() {
  15. return null;
  16. }
  17. }

配置文件

测试代码

  1. @Test
  2. public void testGetBean(){
  3. ApplicationContext applicationContext=new
    ClassPathXmlApplicationContext("applicationContext5.xml");
  4. Book book = applicationContext.getBean("book", Book.class);
  5. System.out.println(book);
  6. }

image


Generated with Mybase Desktop 8.2.13

posted @ 2023-07-30 12:35  AidenDong  阅读(31)  评论(0)    收藏  举报