将自己创建的对象放入spring容器管理_spring的IoC入门实践

本文介绍了Spring的IoC(控制反转)概念和依赖注入(DI)原理,通过实例详细讲解如何使用XML配置和注解进行对象管理。从创建Maven项目开始,逐步演示了配置文件的编写、Bean的声明、测试类的实现,以及基于XML的DI,包括set注入、构造注入和自动注入。最后,探讨了基于注解的DI,如@Component、@Repository、@Service和@Controller,并展示了如何使用@Autowired和@Resource注解进行属性注入。
摘要由CSDN通过智能技术生成

一、IoC简介

控制反转(loC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。

loC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。

依赖:classA 类中含有classB 的实例,在classA 中调用classB 的方法完成功能,即classA 对classB 有依赖。

loc的实现:

依赖注入:Dl(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成。只需要在程序中提供要使用的对象名称就可以,至于对象如何在容器中创建、赋值、查找都由容器内部实现。

依赖注入DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

Spring的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系的管理。

Spring框架使用依赖注入(DI)实现IoC。使用的 DI 实现了 IoC 的功能,spring底层创建对象,使用的是反射机制。

Spring容器是一个超级大工厂,负责创建、管理所有的 Java对象,这些 Java对象被称为Bean。Spring容器管理着容器中Bean之间的依赖关系,Spring使用 “依赖注入” 的方式来管理Bean之间的依赖关系。使用 loC 实现对象之间的解耦和。

二、Spring的第一个程序

1、创建maven项目

77d2a7d5d8c0f920e4e7fe741625a881.png

2、引入maven依赖pom

59cccd45fbf2f864087fc918a6c4a545.png

3、定义接口与实体类

package cn.edu.huat.service;public interface SomeService {
        void doSome();}

SomeServiceImpl(实现类):

package cn.edu.huat.service.impl;import cn.edu.huat.service.SomeService;public class SomeServiceImpl implements SomeService {
        @Override    public void doSome() {
            System.out.println("执行了SomeServiceImpl的doSome方法");    }}

4、创建Spring配置文件

声明bean,就是告诉spring要创建某个类的对象

id:对象的自定义名称,唯一值。spring通过这个名称找到对象

class:类的全限定名称(不能是接口,因为spring是反射机制创建对象, 必须使用类)

<?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="someService" class="cn.edu.huat.service.impl.SomeServiceImpl" />beans>

spring配置文件解析:

(1)beans

根标签,spring把 java对象成为bean

(2)spring.beans.xsd

约束文件,和mybatis指定dtd是一样的

(3)bean

spring相当于就完成如下程序:

//springMap.put(id的值,对象);springMap.put("someService",new SomeServiceImpl()); 

spring是把创建好的对象放入到map中,spring框架有一个map存放对象

//springMap.put(id的值,对象);springMap.put("someService",new SomeServiceImpl()); 

注意:一个bean标签声明一个对象

5、定义测试类

spring默认创建对象的时间:在创建spring的容器时,会创建配置文件中的所有的对象。

spring创建对象:默认调用的是无参数构造方法

package cn.edu.huat;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {
        @Test    public void test02(){
            //使用spring容器创建的对象        //1、指定spring配置文件的名字        String config = "beans.xml";        //2、创建表示spring容器的对象,ApplicationContext        // ApplicationContext:表示Spring容器,通过容器获取对象        // ClassPathXmlApplicationContext:表示从类路径中加载spring配置文件        ApplicationContext ac = new ClassPathXmlApplicationContext(config);        //从容器中获取某个值,你要调用对象的方法        //getBean("配置文件中的bean的id值")        SomeService someService = (SomeService) ac.getBean("someService");        //使用spring创建好的对象        someService.doSome();    }}

34d8a0d9276f6e4aeff4032fb3cbbdcf.png

注意:类路径如下图所示

835e2b11d5f97c4aa62548a3f64cb65f.png

6、使用spring创建非自定对象

(1)创建一个存在的某个类的对象

"myDate" class="java.util.Date" />

(2)测试类

package cn.edu.huat;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Date;public class MyTest {
        @Test    public void test03(){
            String config = "beans.xml";        ApplicationContext ac = new ClassPathXmlApplicationContext(config);        Date myDate = (Date) ac.getBean("myDate");        System.out.println("Date:" + myDate);    }}

0c01b8b3401de73fc48d662f9c89bf08.png

三、基于XML的DI

1、注入分类

bean实例在调用无参构造器创建对象后,就要对bean对象的属性进行初始化。初始化是由容器自动完成的,称为注入(即赋值)。

根据注入方式的不同,常用的有两类:set注入、构造注入

(1)set 注入(掌握)

set注入也叫设值注入。是指,通过setter方法传入被调用者的实例。这种注入方式简单、直观,因而在Spring的依赖注入中大量使用。

简单类型

applicationContext.xml(Spring配置文件)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值