Spring框架(一)初始IoC和Spring

基于:【狂神说Java】Spring5最新完整教程IDEA版通俗易懂

1 简介

Spring是一个轻量级**控制反转(IoC)面向切面(AOP)**的容器框架。历史:2002年,interface21;2004年,spring1.0;Rod Johnson,音乐学博士;“不要重复发明轮子”;Spring使现有技术更加容易使用,大杂烩;

Spring七大模块:
在这里插入图片描述

2 IoC理论

控制反转(Inversion of Control),1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。

场景:服务端有dao包,下面有UserDao接口和UserDaoImpl的实现,然后为客户端提供了service包;业务逻辑层,下面有UserService接口和UserServiceImpl的实现,UserServiceImpl实现的时候,组合了一个UserDaoImpl对象,当客户端只调用UserDaoImpl的方法就可以使用UserDao代理模式)的方法。

问题:实现UserDao接口的类越来越多时,用户想用这些类时,需要程序员手动去改动UserDaoImpl中组合的对象。这太繁琐。

解决:在UserDaoImpl实现中,改组合为聚合,新增setUserDaoImpl(UserDao usrDao)方法,让用户决定传入什么实现的UserDao。控制实现了反转,控制权在用户层面上了。
在这里插入图片描述
控制反转IoC是一种设计思想,DI(依赖注入)是实现IoC的一种方法。

3 第一个Spring程序

3.1 创建maven项目添加依赖

<!-- spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

<!-- 日志文件 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>


<!--juint-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

由于spring-webmvc的包较多,包括aopbeanscontextcoreexpressionweb;所以导它。

3.2 创建pojo下的实体类

public class User {
    private String name;
}

在pojo包下面创建一个测试的实体类,注意必须要有无参构造,以上显示省略了getter、setter方法;

3.3 配置beans.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">
    <bean id="User" class="xyz.cqulwj.pojo.User">
        <property name="name" value="小明"/>
    </bean>

</beans>

id为这个bean的id,class为这个bean属于哪个类,property为属性赋值;

3.4 测试获取对象

@Test
public void userClassTest(){
    // 获取Spring的上下文对象
    ApplicationContext applicationContext =new ClassPathXmlApplicationContext("beans.xml");
    // 根据id获得对象
    User user = (User)applicationContext.getBean("User");
    // 调用方法
    logger.debug(user.toString());
}

3.5 原理

  • new ClassPathXmlApplicationContext("beans.xml")的时候,把在xml注册的所有对象进行了构造(初始化);
  • property属性,当applicationContext.getBean("User")的时候,调用了对象的set()方法把value设置了进去;
  • id就是对象名;
  • 对象的创建变成了Spring来控制,程序是被动接收对象,使用set方法进行注入对象。理解IoC,就是对象全部交给Spring创建、管理、装配。

4 有参构造

4.1 按参数序号

<bean id="user" class="xyz.cqulwj.pojo.User">
    <constructor-arg index="0" value="小红"/>
    <constructor-arg index="1" ref="address"/>
</bean>

4.2 按参数类型匹配

<bean id="user" class="xyz.cqulwj.pojo.User">
    <constructor-arg type="String" value="小红"/>
    <constructor-arg type="xyz.cqulwj.pojo.Address" ref="address"/>
</bean>

如果有两个参数一样就不行了。

4.3 按参数名(常用)

<bean id="user" class="xyz.cqulwj.pojo.User">
    <constructor-arg name="name" value="小红"/>
    <constructor-arg name="address" ref="address"/>
</bean>

5 Spring配置

5.1 别名alias

<bean id="address" class="xyz.cqulwj.pojo.Address">
    <property name="address" value="北京市"/>
</bean>

<alias name="address" alias="beijing"/>

可以给beanid取别名;

5.2 import

多用于团队开发,可以把多个配置文件合并为一个;

<import resource="beans1.xml"/>
<import resource="beans2.xml"/>
<import resource="beans3.xml"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值