4_Spring_XML方式实现DI

发布时间 2023-07-30 12:39:12作者: AidenDong

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.      <dependency>
    
  2.          <groupId>org.springframework</groupId>
    
  3.          <artifactId>spring-context</artifactId>
    
  4.          <version>5.3.5</version>
    
  5.      </dependency>
    
  6.      <dependency>
    
  7.          <groupId>junit</groupId>
    
  8.          <artifactId>junit</artifactId>
    
  9.          <version>4.13.1</version>
    
  10.         <scope>test</scope>
    
  11.     </dependency>
    

创建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方法给对象属性赋值

  1.  <bean id="user1" class="com.msb.bean.User">
    
  2.      <property name="userid" value="1"></property>
    
  3.      <property name="username" value="张三"></property>
    
  4.      <property name="password" value="abcdefg"></property>
    
  5.  </bean> 
    

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