Spring(三)——HelloSpring、IOC创建对象的方式、属性注入、自动装配、使用注解开发

本文详细介绍了Spring框架的IOC理论,通过实例展示了如何使用无参和有参构造创建对象,以及属性注入和自动装配。此外,还讲解了Spring的别名、bean配置、注解开发等关键概念,重点讨论了@Autowired和@Resource注解的区别和使用场景。
摘要由CSDN通过智能技术生成

1. 简介

Spring就是一个轻量级的控制反转(IOC) 和面向切面编程(AOP)的框架!
Spring目的:解决企业应用开发的复杂性

2. IOC理论推导

传统new对象的逻辑开发:
dao—>daoImpl—>service—>serviceImpl

如果用户想要切换数据库实现,所有的主动权在程序员的手上,需要修改程序。

所以要控制反转:原来程序员的主动权要交给用户;需要对外暴露接口(set方法)

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法

(1)在pom.xml 中导入junit 测试依赖

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

(2)在dao层创建接口,以及接口的实现类
在这里插入图片描述

  • UserMapper接口
package com.zz.dao;

//关于用户的接口
public interface UserMapper {
   
    public void getUser();
}
  • 接口的实现类UserMapperImpl
package com.zz.dao.impl;

import com.zz.dao.UserMapper;

public class UserMapperImpl implements UserMapper {
   

    public void getUser() {
   
        System.out.println("获取用户数据");
    }
}
  • 接口的实现类UserMapperMysqlImpl
package com.zz.dao.impl;

import com.zz.dao.UserMapper;

public class UserMapperMysqlImpl implements UserMapper {
   
    public void getUser() {
   
        System.out.println("Myaql获取用户数据");
    }
}

(3)同样在service层(调用dao层)创建接口,以及接口的实现类

在这里插入图片描述

  • UserService接口
package com.zz.service;
//用户业务层,本质调用dao层(获取数据),然后在业务层执行操作
public interface UserService {
   
    public void getUser();
}
  • 接口的实现类UserServiceImpl
package com.zz.service.impl;

import com.zz.dao.UserMapper;
import com.zz.service.UserService;

public class UserServiceImpl implements UserService {
   

    //调用dao层
    private UserMapper userMapper;

    //set方法 只需要对外提供接口 程序不用管理实现
    public void setUserMapper(UserMapper userMapper) {
   
        this.userMapper = userMapper;
    }

    public void getUser() {
   
        userMapper.getUser();
    }
}

(4)在test层,创建测试类
用户根据不同的需求进行修改测试类代码
在这里插入图片描述

  • 调用UserMapperImpl实现类的方法
    注释掉UserMapperMysqlImpl userMapper = new UserMapperMysqlImpl();这行代码即可
import com.zz.dao.impl.UserMapperImpl;
import com.zz.dao.impl.UserMapperMysqlImpl;
import com.zz.pojo.Hello;
import com.zz.pojo.Student;
import com.zz.service.impl.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

//客户端
public class MyTest {
   
    @Test
    public void test1(){
   
        //主动权交给用户 想用就去调用接口
        UserMapperImpl userMapper = new UserMapperImpl();
        //UserMapperMysqlImpl userMapper = new UserMapperMysqlImpl();

        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserMapper(userMapper);
        userService.getUser();
    }
}

测试结果:
在这里插入图片描述

  • 调用UserMapperMysqlImpl实现类的方法
    注释掉UserMapperImpl userMapper = new UserMapperImpl();这行代码即可
import com.zz.dao.impl.UserMapperImpl;
import com.zz.dao.impl.UserMapperMysqlImpl;
import com.zz.pojo.Hello;
import com.zz.pojo.Student;
import com.zz.service.impl.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

//客户端
public class MyTest {
   
    @Test
    public void test1(){
   
        //主动权交给用户 想用就去调用接口
        //UserMapperImpl userMapper = new UserMapperImpl();
        UserMapperMysqlImpl userMapper = new UserMapperMysqlImpl();

        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserMapper(userMapper);
        userService.getUser();
    }
 }

测试结果:
在这里插入图片描述

3. HelloSpring

项目目录:
在这里插入图片描述
(1)在pom.xml 中导入spring-webmvc依赖

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

(2)创建实体类 Hello

package com.zz.pojo;

public class Hello {
   
    private String name;

    public void setName(String name) {
   
        this.name = name;
    }

    public void show(){
   
        System.out.println("Hello,"+name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值