Spring框架SSM之IOC详解

 更新时间:2025年11月10日 09:50:35   作者:北城以北Iris  
本文介绍了Spring框架中IOC(控制反转/依赖注入)的两种实现方式,每种方式结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

Spring框架之IOC

1.Spring框架搭建

在pom文件中引入jar包

<properties>
    <spring.version>4.0.2.RELEASE</spring.version>
</properties>
<!-- spring框架包 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
</dependency>

2.IOC(控制反转/依赖注入)

将程序的控制权从代码本身转移到外部容器

组件化的思想:分离关注点,使用接口,不再关注实现

依赖的注入:将组件的构建和使用分开

2.1在配置文件中进行控制反转和依赖注入

dao层

/**
 * 显示信息
 */
public interface UserDao {
    public void show() ;
}
public class UserDaoImpl implements UserDao {
    @Override
    public void show() {
        System.out.println("输出UserDaoImpl信息");
    }
}

service层

public interface UserService {
    /**
     * 显示信息
     */
    public void show() ;
}
public class UserServiceImpl implements UserService {
    @Setter
    private UserDao userDao;
    @Override
    public void show() {
        userDao.show();
    }
}

在resources文件夹下创建一个spring.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
</beans>

xml配置文件

<!--    配置userDao bean-->
<bean  id="userDao" class="com.hz.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.hz.service.impl.UserServiceImpl">
<!--        配置userDao属性,ref引用userDao bean -->
	<property name="userDao" ref="userDao"></property>
</bean>

读取配置文件并运行

//使用ClassPathXmlApplicationContext读取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserService userService =(UserService) context.getBean("userService");
userService.show();

2.2使用注解的形式实现

@Component:实现Bean组件的定义

@Repository([实例化名称]) :用于标注DAO类 默认使用当前类的类名(首字母小写)作为bean的别名

@Service([实例化名称]) :用于标注Service业务类 默认使用当前类的类名(首字母小写)作为bean的别名

@Autowired+@Qualifier(“userDao”)等价于@Resource(name = “userDao”)

dao层

/**
 * 显示信息
 */
public interface UserDao {
 /**
   * 删除学生
   * @param id
   */
  public int delStudent(Integer id);
}
@Repository
public class UserDaoImpl implements UserDao {
       @Override
    public int delStudent(Integer id) {
        System.out.println("删除id为"+id+"的学生");
        return 0;
    }
}

service层

public interface UserService {
      /**
     * 删除学生
     * @param id
     */
    public  int delStudent(Integer id);
}
@Service
public class UserServiceImpl implements UserService {
  //@Resource(name = "userDaoImpl")
    @Autowired
 //@Qualifier("userDaoImpl")
    private UserDao userDao;
    @Override
    public int delStudent(Integer id) {
        userDao.delStudent(id);
       return  100;
    }
}

注:JDK17把@Resource废除,如果需要使用此注解需导入jar包

<dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>1.2</version>
</dependency>

在配置文件中开启注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
      <!--    配置组件扫描,扫描com.hz.dao和com.hz.service和com.hz.aop包下的类 -->
    <context:component-scan base-package="com.hz.dao,com.hz.service"/>
</beans>

读取配置文件

//使用ClassPathXmlApplicationContext读取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
//因为@Repository默认使用当前类的简单类名(首字母小写)作为bean的别名,所以使用getBean("userServiceImpl")获取对象
UserService userService =(UserService) context.getBean("userServiceImpl");
userService.delStudent(1001);

2.3@Autowired和@Resource区别

  • Resource 按照名称依赖注入,如果没有对应则按照类型注入
  • Autowired 按照依赖类型注入

到此这篇关于SSM--Spring框架之IOC的文章就介绍到这了,更多相关spring框架ioc内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot项目.gitignore没生效的解决方案

    SpringBoot项目.gitignore没生效的解决方案

    在 Spring Boot 项目中,.gitignore 文件的作用是告诉 Git 哪些文件或目录不需要被版本控制,但是我们经常会遇到gitignore失效的问题,所以本文给大家介绍了为什么.gitignore会失效和解决方案,需要的朋友可以参考下
    2025-06-06
  • Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析

    Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析

    本文通过代码给大家讲解了JAVA中Integer.valueOf, parsetInt() String.valueOf的区别和结果,需要的朋友可以参考下
    2018-05-05
  • MybatisPlus中如何调用Oracle存储过程

    MybatisPlus中如何调用Oracle存储过程

    这篇文章主要介绍了MybatisPlus中如何调用Oracle存储过程的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • JAVA中JSONObject对象和Map对象之间的相互转换

    JAVA中JSONObject对象和Map对象之间的相互转换

    这篇文章主要介绍了JAVA中JSONObject对象和Map对象之间的相互转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Hadoop2.8.1完全分布式环境搭建过程

    Hadoop2.8.1完全分布式环境搭建过程

    本文搭建了一个由三节点(master、slave1、slave2)构成的Hadoop完全分布式集群(区别单节点伪分布式集群),并通过Hadoop分布式计算的一个示例测试集群的正确性。对hadoop分布式环境搭建过程感兴趣的朋友跟随小编一起看看吧
    2019-06-06
  • 利用Java实现带GUI的气泡诗词特效

    利用Java实现带GUI的气泡诗词特效

    这篇文章主要为大家介绍了如何利用Java语言实现带GUI的气泡诗词特效,文中的示例代码讲解详细,对我们学习Java有一定帮助,感兴趣的可以了解一下
    2022-08-08
  • Java实现数组与String相互转换的常见方法详解

    Java实现数组与String相互转换的常见方法详解

    在Java开发中,数组与字符串之间的相互转换是处理数据时的常见需求,本文将详细介绍Java中数组与字符串相互转换的常见方法,大家可以根据需要进行选择
    2025-07-07
  • springboot新建项目pom.xml文件第一行报错的解决

    springboot新建项目pom.xml文件第一行报错的解决

    这篇文章主要介绍了springboot新建项目pom.xml文件第一行报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解在Java中如何优雅的停止线程

    详解在Java中如何优雅的停止线程

    线程,作为并发编程的基础单元,允许程序同时执行多个任务,在Java中,线程可以理解为程序中的独立执行路径,通过使用线程,开发者可以创建更加响应灵敏、效率更高的应用程序,本文小编将给大家介绍一下Java中如何优雅的停止线程,需要的朋友可以参考下
    2023-11-11
  • 解决mybatis plus 驼峰式命名规则问题

    解决mybatis plus 驼峰式命名规则问题

    这篇文章主要介绍了解决mybatis plus 驼峰式命名规则,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论