美文网首页
109、【JavaEE】【Spring】Spring 注解开发(

109、【JavaEE】【Spring】Spring 注解开发(

作者: yscyber | 来源:发表于2021-10-24 03:44 被阅读0次

1、概述

  • Spring 是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替 XML 配置文件可以简化配置,提高开发效率。

  • 当然,开发时具体策略是说“完全使用注解,完全抛弃 XML 配置文件”还是“注解与 XML 配置文件结合使用”,根据实际情况。

2、Spring 中常见注解

Spring-22

3、使用注解开发举例

  • 1、在核心配置文件src/main/resources/applicationContext.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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

     <!-- 开启“注解扫描”,使得 Spring 能够识别该包下注解 --->
    <context:component-scan base-package="com.yscyber.spring"/>

</beans>
  • 2、创建UserRepo接口和UserRepoImpl实现类,在UserRepoImpl上添加注解@Repository,将该类的对象交给 Spring 容器进行管理
public interface UserRepo {

    int deleteUserById(String id);

}
import com.yscyber.spring.two.repo.UserRepo;

import org.springframework.stereotype.Repository;

@Repository
public class UserRepoImpl implements UserRepo {

    @Override
    public int deleteUserById(String id) {
        System.out.println("删除用户...");
        return 1;
    }

}
  • 3、创建UserService接口和UserServiceImpl实现类,在UserServiceImpl上添加注解@Service,将该类的对象交给 Spring 容器进行管理。另外,由于 Service 层要使用 Repository 层,所以将UserRepo对象作为UserService的成员变量,这个时候,需要依赖注入,使用@Autowired注解
public interface UserService {

    int deleteUserById(String id);

}
import com.yscyber.spring.two.repo.UserRepo;
import com.yscyber.spring.two.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepo userRepo;

    @Override
    public int deleteUserById(String id) {
        return userRepo.deleteUserById(id);
    }

}
  • 4、
    @Test
    public void test1() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserService userService = applicationContext.getBean(UserService.class);

        userService.deleteUserById("1");
    }

4、控制反转使用的注解

  • @Component@Controller@Service@Repository
    将类的对象交给 Spring 容器(IoC 容器)管理。

  • @Component(value = "")value相当于<bean id="" class=""/>中的id

5、依赖注入使用的注解

  • @Autowired@Qualifier@Resource
    负责依赖注入

  • @Autowired:根据类型注入。

  • @Qualifier:与@Autowired结合使用,需要根据 id 来区别注入的类型(比如:多态下,接口有多个实现类),一般使用@Autowired就足够了,很少去结合使用@Qualifier

public interface UserRepo {

    int deleteUserById(String id);

}
import com.yscyber.spring.three.repo.UserRepo;

import org.springframework.stereotype.Repository;

@Repository("userRepoImpl1")
public class UserRepoImpl1 implements UserRepo {

    @Override
    public int deleteUserById(String id) {
        System.out.println("实现类1");
        return 1;
    }

}
import com.yscyber.spring.three.repo.UserRepo;

import org.springframework.stereotype.Repository;

@Repository("userRepoImpl2")
public class UserRepoImpl2 implements UserRepo {

    @Override
    public int deleteUserById(String id) {
        System.out.println("实现类2");
        return 1;
    }

}
public interface UserService {

    int deleteUserById(String id);

}
import com.yscyber.spring.three.repo.UserRepo;
import com.yscyber.spring.three.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    @Qualifier("userRepoImpl2") // 使用 @Qualifier 区分到底注入的是 UserRepoImpl1 还是 UserRepoImpl2
    private UserRepo userRepo;

    @Override
    public int deleteUserById(String id) {
        return userRepo.deleteUserById(id);
    }

}
  • @Resource:相当于@Autowired@Qualifier("······"),很少使用。需要注意的是,这个注解属于javax包,这个包在 Java 11 之后已经被移除,所以如果还想使用这个注解,需要引入一个 Maven 依赖
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
import com.yscyber.spring.three.repo.UserRepo;
import com.yscyber.spring.three.service.UserService;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserServiceImpl implements UserService {

    @Resource(name = "userRepoImpl2") // 替代 @Autowired 和 @Qualifier("······") 
    private UserRepo userRepo;

    @Override
    public int deleteUserById(String id) {
        return userRepo.deleteUserById(id);
    }

}

相关文章

  • 109、【JavaEE】【Spring】Spring 注解开发(

    1、概述 Spring 是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替 XM...

  • spring02

    Spring相关注解 Spring注解开发 集成Spring测试框架 重点:重点掌握Spring相关注解。@Con...

  • 111、【JavaEE】【Spring】Spring 注解开发(

    1、概述 这部分的注解,是使用后完全可以替换 XML 核心配置文件的注解。之前的讲述的注解中(https://ww...

  • 110、【JavaEE】【Spring】Spring 注解开发(

    @Value 情形一: 情形二:注入来自.properties文件的字符串 @Scope

  • DAY05-Sping02

    一、 DI 注解 Spring的@Autowired JavaEE的@Resource 都是取代注入bean, 贴...

  • spring mvc 父子容器

    看本文之前首先需了解 spring注解驱动开发。可以看另外一篇文章spring注解,本文是在spring注解开发的...

  • SpringBoot

    一、Spring Boot简介 1.1、Spring Boot的特点 SpringBoot,新一代JavaEE开发...

  • Spring快速入门详解

    前言 Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%。Spring具有简化开发,降低企...

  • Spring的学习笔记

    一、Spring的概述 1.1、Spring是什么 Spring是一个开源的轻量级JavaEE开发应用框架,其目的...

  • 第2章:spring 依赖

    第2章:spring 依赖 标签(空格分隔): JavaEE开发的颠覆者SpringBoot实战 spring中声...

网友评论

      本文标题:109、【JavaEE】【Spring】Spring 注解开发(

      本文链接:https://www.haomeiwen.com/subject/aielaltx.html