IoC Di

Di 指的是bean之间的依赖注入,设置对象之间的级联关系

Classes:

package com.southwind.entity;

import lombok.Data;

@Data
public class Classes {
private Integer id;
private String name; }

Student:

package com.southwind.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; @Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer id;
private String name;
private Integer age;
private Classes classes;
}

spring-di.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">
<!--Classes-->
<bean id ="classes" class="com.southwind.entity.Classes">
<property name="id" value="1"></property>
<property name="name" value="1班"></property>
</bean>
<!-- Student-->
<bean id ="student" class="com.southwind.entity.Student">
<property name="id" value="1"></property>
<property name="name" value="张三"></property>
<property name="age" value="18"></property>
<property name="classes" ref="classes"></property>
</bean>
</beans>

Test2:

package com.southwind.test;

import com.southwind.entity.Classes;
import com.southwind.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test2 {
public static void main(String[] args) {
//IoC容器自动创建对线,开发者只需要取出对象即可
ApplicationContext applicationContext =new ClassPathXmlApplicationContext("spring-di.xml");
// String[] names = applicationContext.getBeanDefinitionNames();
// for (String name:names){
// System.out.println(name);
// }
Student student = (Student)applicationContext.getBean("student");
Classes classes =(Classes)applicationContext.getBean("classes");
System.out.println(student);
}
}

Bean对象的级联学要使用ref属性来完成映射,而不能直接使用value否值会抛出类型转化异常:

Classes:

package com.southwind.entity;

import lombok.Data;

import javax.swing.*;
import java.util.List; @Data
public class Classes {
private Integer id;
private String name;
private List<Student> studentList; }

spring-di.xml:

<!--Classes-->
<bean id ="classes" class="com.southwind.entity.Classes">
<property name="id" value="1"></property>
<property name="name">
<value><![CDATA[<一班>]]></value>
</property>
<property name="studentList">
<list>
<ref bean="student" ></ref>
<ref bean="student1" ></ref>
</list>
</property>
</bean>

但是要注意不能闭环

spring中的Bean

bean 是根据scope 来生成的,表示bean的作用域,scope有4种“

  1. singleton ,单例,表示通过Spring容器获取对象的唯一性 默认

    (无论取不取,只要加载IoC容器,就创建对象)
  2. prototype, 原型,表示通过Spring容器获取的对象是不同的

    (如果不取Bean就不创建对象,取几个就创建几个对象)
  3. request ,请求,表示在一次HTTP请求内有效
  4. session ,会话,表示在一个用户内有效

    requestion、session仅在web中有效

Spring的继承

Spring的继承不同于Java ,区别:java中的继承是真对类的,SPring中的继承是针对对象的(Bean)

Spring的继承中,子Bean可以以继承父Bean中的值

通过parent设置继承关系,同时值bean的值来继承和覆盖

<bean id="user1" class="com.southwind.entity.User" scope="prototype" >
<property name="id" value="1"></property>
<property name="name" value="张三"></property>
</bean>
<bean id="user" class="com.southwind.entity.User" scope="prototype" parent="user1">
<property name="name" value="李四"></property>
</bean>

即使是两个不同的类,只是赋值。(属性名一样必须,不一样抛异常)(只要成员变量一样就行)

Spring的依赖:

用来设置两个Bean的顺序

IoC容器默认情况是通过spring.xml中bean的配置顺序来决定创建的顺序

在不修改spring.xml来depends-on=""修改

<bean id="user" class="com.southwind.entity.User" depends-on="student">

</bean>
<bean id="student" class="com.southwind.entity.Student"></bean>

最新文章

  1. Honeywords项目——检查密码是否被破解的一种简单方法
  2. MySQL数据库权限操作指南
  3. 判断https
  4. recursion lead to out of memory
  5. mac终端下svn常用命令
  6. centos下安装dubbo-admin步骤
  7. 201521123040《Java程序设计》第5周学习总结
  8. Django的admin相关
  9. iReport官方文档(英文版本)+ iReport中文教程
  10. JS_理解函数参数按值传递
  11. [development][libconfig] 配置文件库
  12. 02linux 基本命令
  13. JAVA数据库编程(JDBC技术)-入门笔记
  14. MySQL 死锁与日志二三事
  15. [leetcode]318. Maximum Product of Word Lengths单词长度最大乘积
  16. P4284 [SHOI2014]概率充电器
  17. AsycnTask
  18. Typora ---一款简洁的Markdown编辑器
  19. 扩展RBAC用户角色权限设计方案&lt;转&gt;
  20. uva 11381(神奇的构图、最小费用最大流)

热门文章

  1. i春秋Musee de X
  2. vue脚手架安装及依赖
  3. 【微服务架构设计实施】第一部分:架构篇-1:微服务架构与Spring Cloud介绍
  4. 微服务开发平台 Spring Cloud Blade 部署实践
  5. MongoDB数据库与Python的交互
  6. 区块链,中心去,何曾着眼看君王?用Go语言实现区块链技术,通过Golang秒懂区块链
  7. week_4
  8. 【开源】基于.net6+gtksharp实现的Linux下的图形界面串口调试工具
  9. ESXI 7.0封装网卡驱动
  10. 《Kubernetes Operator 开发进阶》- 作者絮絮叨