【一步一个脚印】从零开始搭建SSM框架-- 3.2 配置 spring

注:spring 是统一管理所有类的,所以也可以管理 Controller 层的类,但是 Controller 层的类,属于 spring-mvc 的管理范围,所以这里,仅仅测试 spring 的注解模式效果(即测试 Service 层使用注解模式的效果)

一、配置 spring-context.xml (其他别名:spring.xml 或 context.xml 或 springContext.xml 或 application.xml 或 applicationContext.xml)

1> 创建

右击项目结构中的 resources 文件夹,选择 New -> File
如图:
在这里插入图片描述
2> 配置 spring-context.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">

    <!-- 使用 Annotation 自动注册 Bean,在主容器中不扫描 @Controller 注解,在 SpringMVC 中只扫描 @Controller 注解。-->
    <context:annotation-config /><!--声明注解配置,开启注解模式-->
    <context:component-scan base-package="com.piglegend.ssm">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/><!--不扫描@Controller注解-->
    </context:component-scan><!--告诉Spring开启注解的类在那个包下(组件扫描的意思)-->
</beans>

在 service 包下创建如下结构:

在这里插入图片描述
其中 test 为一个接口,testImpl 为一个接口实现类

输入 test 接口代码

package com.piglegend.ssm.service;

public interface test {
    public String sayHi();
}

输入 testImpl 代码

package com.piglegend.ssm.service.Impl;

import com.piglegend.ssm.service.test;
import org.springframework.stereotype.Service;

@Service(value = "testImpl")
public class testImpl implements test {
    public String sayHi() {
        System.out.println("测试成功");
        return null;
    }
}

test 文件夹下创建一个类 ServiceTest

import com.piglegend.ssm.service.Impl.testImpl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ServiceTest {

    /**
     * 执行测试方法前执行
     */
    @Before
    public void before() {
        System.out.println("执行 before() 方法,开始测试;");
    }

    /**
     * 执行测试方法后执行
     */
    @After
    public void after() {
        System.out.println("执行 after() 方法,测试完毕;");
    }

    @Test
    public void testSayHi() {
        // 获取 Spring 容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");

        // 从 Spring 容器中获取对象
        testImpl testimpl = (testImpl) applicationContext.getBean("testImpl");
        testimpl.sayHi();
    }
}

右击 @Test 测试方法,点击运行

运行结果:

在这里插入图片描述
输出,testImpl 函数中的 测试成功 字段,说明 spring 注解模式已经成功将 testImpl 注入容器了

对于 spring 容器 注解的简介:

@Component(value=“beanId”)

需要在普通类上使用注解 @Component,该注解的 value 属性用于指定该 bean 的 id 值

@Repository(value=“beanId”)

用于对 DAO 实现类进行注解

@Service(value=“beanId”)

用于对 Service 实现类进行注解

@Controller(value=“beanId”)

用于对 Controller 实现类进行注解

@Scope(“prototype”)

需要在类上使用注解 @Scope,其 value 属性用于指定作用域。默认为 singleton。
singleton:单态模式。即在整个 Spring 容器中,使用 singleton 定义的 Bean 将是单例的,只有一个实例。默认为单态的。
prototype:原型模式。即每次使用 getBean 方法获取的同一个 <bean /> 的实例都是一个新的实例。
对于 scope 为 singleton 的单例模式,该 Bean 是在容器被创建时即被装配好了。
对于 scope 为 prototype 的原型模式,Bean 实例是在代码中使用该 Bean 实例时才进行装配的

@Value(“value”)

需要在属性上使用注解 @Value,该注解的 value 属性用于指定要注入的值。

使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。

@Autowired

需要在域属性上使用注解 @Autowired,该注解默认使用 按类型自动装配 Bean 的方式。

使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。

@Resource(name="")

需要在域属性上使用注解 @Resource,该注解有一个 name 属性,可以创建指定的 bean

@PostConstruct

在方法上使用 @PostConstruct 相当于初始化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值