IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> spring-IOC -> 正文阅读

[Java知识库]spring-IOC

1、Spring——第一天


  • spring 是一个开源的免费空间
  • spring是一个轻量级、非入侵式的框架
  • 控制翻转(IOC)、面向切面编程(AOP)
  • 支持事务的处理,对框架的整合

spring是一个轻量级的控制翻转和面向切面编程的框架

1.2 原来方式


  • UserDao接口–UserDaoImpl实现类
  • UserService业务接口-UserServicempl业务实现类
  • 用户实际调用的是service层,service层调用dao层

如果在dao层增加了新的方法,又想在service调用该方法,则需在service层改变代码–新建实现类

因为你在代码里面写死了,新增加一个需求,就要改一个代码,牵一发动全身

private UserDao dao=new UserDaoImpl();
private UserDao dao1=new UserDaoMySqlImpl();
public void getUser() {
    dao.getUser();
    dao1.getUser();
}

1.3spring方式

利用set进行动态的实现注入

private UserDao dao;
public void setDao(UserDao dao) {
    this.dao = dao;
}
  • 之前,所有的东西都是由程序去进行控制创建

  • 使用set注入后,程序不在有主动性,而是被动的接收对象,把主动权交给了调用者

    **我们不需要再管理对象的创建,系统的耦合性降低,可以专注于在业务的实现上–这是IOC的原型

异常:class path resource [beans.xml] cannot be opened because it does not exist

路径错误 换相对路径即可 来自源根的路径

**我们不需要再在程序中更改,要实现不同的操作,只需要在xml配置文件修改 **

IOC:对象由Spring创建,管理,装配!

  • 反转:程序本身不创建对象,而变成被动的接收对象
  • 控制:之前是程序控制创建对象,现在用spring,由spring控制
  • 依赖注入:利用set方法进行注入的(对象,成员变量)
<?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">

    <bean id="daoImpl" class="IOC.com.xiaocong.dao.UserDaoImpl"></bean>
    <bean id="mysqlImpl" class="IOC.com.xiaocong.dao.UserDaoMySqlImpl"></bean>
    <bean id="UserServiceImpl" class="IOC.com.xiaocong.service.UserServiceImpl">
        <property name="dao" ref="mysqlImpl"></property>
    </bean>
</beans>

测试:

@Test
public void test1(){
    ApplicationContext Context= new ClassPathXmlApplicationContext("IOC\\com\\beans.xml");
    UserServiceImpl userServiceImpl = (UserServiceImpl) Context.getBean("UserServiceImpl");
    userServiceImpl.getUser();
}

1.4 IOC创建对象方式

  • 使用无参构造方法创建对象——默认
  • 使用有参构造方法创建对象——注入属性
   <bean id="user" class="xiaocong.User">

        <!--            通过有参构造方法-->
        <constructor-arg name="name" value="李四"></constructor-arg>
        <constructor-arg name="age" value="12"></constructor-arg>
    </bean>

    <bean id="userT" class="xiaocong.UserT"></bean>

在配置文件加载时候,spring容器管理的对象就已经初始化了

spring会创建所有的对象(默认调用无参构造方法)

1.5 依赖注入

  • 构造器注入

    1.4

  • set方式注入

  1. set注入要求Bean提供一个默认的构造函数,并为需要注入的属性提供对应的Setter方法。

  2. Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值。

  3. 假设Bean显示定义了一个带参的构造函数,则需要同时提供一个默认无参的构造函数,否则使用属性注入时将抛出异常。

<bean id="student" class="xiaocong.Students">
    <!-- 普通类型 普通注入-->
    <property name="name" value="张三"></property>
    <!-- 引用类型  bean注入-->
    <property name="address" ref="address"></property>
    <!-- 数组类型  数组注入-->
    <property name="books">
        <array>
            <value>围城</value>
            <value>白夜行</value>
        </array>
    </property>
    <!--   List注入-->
    <property name="hobbys">
        <list>
            <value>敲代码</value>
            <value>睡觉</value>
        </list>
    </property>
    <!--  Map注入-->
    <property name="card">
        <map>
            <entry key="身份证" value="000011"></entry>
            <entry key="手机号" value="1110"></entry>
        </map>
    </property>
    <!--  Set注入-->
    <property name="games">
        <set>
            <value>王者农药</value>
            <value>英雄联盟</value>
        </set>
    </property>
    <!--  null-->
    <property name="wife" value=""></property>
    <!--  properties注入-->
    <property name="info">
        <props>
            <prop key="学号">0001</prop>
            <prop key="pwd">0001</prop>
        </props>
    </property>
 </bean>
<bean id="address" class="xiaocong.Address">
<property name="address" value="江西"></property>
</bean>
private String name;
private Address address;//引用类型
private String[] books;//数组
private List<String> hobbys;
private Map<String,String> card;
private Set<String> games;
private Properties info;
private String wife;

@Override
public String toString() {
    return "Students{" +
            "name='" + name + '\'' +
            ", address=" + address.toString() +
            ", books=" + Arrays.toString(books) +
            ", hobbys=" + hobbys +
            ", card=" + card +
            ", games=" + games +
            ", info=" + info +
            ", wife='" + wife + '\'' +
            '}';
}
@Test
public void test2(){
    ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
    Students student = (Students) context.getBean("student");
    System.out.println(student.toString());
    /**
     * Students{name='张三',
     * address=Address{address='江西'}, 对象
     * books=[围城, 白夜行],             数组
     * hobbys=[敲代码, 睡觉],            list
     * card={身份证=000011, 手机号=1110}, map
     * games=[王者农药, 英雄联盟],       set
     * info={学号=0001, pwd=0001},    properties
     * wife=''}
     */
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:16:21  更:2021-11-10 12:18:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:47:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码