springboot基础配置依赖注入@注解方式

112 篇文章 0 订阅

Spring框架本身有四大原则:

1)使用POJO进行轻量级和最小侵入式开发。

2)通过依赖注入和基于接口编程实现松耦合。

3)通过AOP和默认习惯进行声明式编程。

4)使用AOP和模板(template)减少模式化代码。

Spring所有功能的设计和实现都是基于此四大原则的。

依赖注入

我们经常说的控制翻转(Inversion of Control-IOC)和依赖注入(dependency injection-DI)在Spring环境下是等同的概念,控制翻转是通过依赖注入实现的。

所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。依赖注入的主要目的是为了解耦,体现了一种“组合”的理念。

如果你希望你的类具备某项功能的时候,是继承自一个具有此功能的父类好呢?还是组合另外一个具有这个功能的类好呢?答案是不言而喻的,继承一个父类,子类将与父类耦合,组合另外一个类则使耦合度大大降低。

Spring IoC容器(ApplicationContext)负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中。Spring提供使用xml、注解、Java配置、groovy配置实现Bean的创建和注入。

无论是xml配置、注解配置还是Java配置,都被称为配置元数据,所谓元数据即描述数据的数据。元数据本身不具备任何可执行的能力,只能通过外界代码来对这些元数据行解析后进行一些有意义操作。

Spring容器解析这些配置元数据进行Bean初始化、配置和管理依赖。

声明Bean的注解:

@Component组件,没有明确的角色。

@Service在业务逻辑层(service层)使用。

@Repository在数据访问层(dao层)使用。

@Controller在展现层注入Bean的注解,一般情况下通用。

@Autowired:Spring提供的注解。

@Inject:JSR-330提供的注解。

@Resource:JSR-250提供的注解。

@Autowired、@Inject、@Resource可注解在set方法上或者属性上,习惯注解在属性上,优点是代码更少、层次更清晰。

演示基于注解的Bean的初始化和依赖注入,Spring容器类选用AnnotationConfigApplicationContext。

编写功能类的Bean

FunctionService.java

package com.shrimpking;

import org.springframework.stereotype.Service;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/7 17:43
 * 使用@Service注解声明当前FunctionService类是Spring管理的一个Bean。
 * 其中,使用@Component、@Service、@Repository和@Controller是等效的,
 * 可根据需要选用。
 */
@Service
public class FunctionService
{
    public String sayHello(String word)
    {
        return "Hello " + word + "!";
    }
}


代码解释

①使用@Service注解声明当前FunctionService类是Spring管理的一个Bean。其中,使用@Component、@Service、@Repository和@Controller是等效的,可根据需要选用。

使用功能类的Bean

UseFunctionService.java

package com.shrimpking;

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

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/7 17:44
 * 使用@Service注解声明当前UseFunctionService类是Spring管理的一个Bean。
 */
@Service
public class UseFunctionService
{
    /**
     * 使用@Autowired将FunctionService的实体Bean注入到UseFunctionService中,
     * 让UseFunctionService具备FunctionService的功能,
     * 此处使用JSR-330的@Inject注解
     * 或者JSR-250的@Resource注解是等效的。
     */
    @Autowired
    private FunctionService functionService;

    public String sayHello(String word)
    {
        return functionService.sayHello(word);
    }
}

代码解释

①使用@Service注解声明当前UseFunctionService类是Spring管理的一个Bean。

②使用@Autowired将FunctionService的实体Bean注入到UseFunctionService中,让UseFunctionService具备FunctionService的功能,此处使用JSR-330的@Inject注解或者JSR-250的@Resource注解是等效的。

配置类

DiConfig.java

package com.shrimpking;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/7 17:47
 * @Configuration声明当前类是一个配置类
 * 使用@ComponentScan,
 * 自动扫描包名下所有使用@Service、@Component、@Repository
 * 和@Controller的类,并注册为Bean。
 */
@Configuration
@ComponentScan("com.shrimpking")
public class DiConfig
{
    //...
}

代码解释

①@Configuration声明当前类是一个配置类,在后面1.3.2节的Java配置中有更详细的说明;

②使用@ComponentScan,自动扫描包名下所有使用@Service、@Component、@Repository和@Controller的类,并注册为Bean。

运行

package com.shrimpking;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

@SpringBootApplication
public class Springboot40Application
{

    /**
     * 使用AnnotationConfigApplicationContext作为Spring容器,
     * 接受输入一个配置类作为参数;
     * 获得声明配置的UseFunctionService的Bean。
     * @param args
     */
    public static void main(String[] args)
    {
        //SpringApplication.run(Springboot40Application.class, args);
        AnnotationConfigApplicationContext context
                = new AnnotationConfigApplicationContext(DiConfig.class);
        UseFunctionService useFunctionService
                = context.getBean(UseFunctionService.class);
        System.out.println(useFunctionService.sayHello("di config"));
        context.close();
    }

}

代码解释

①使用AnnotationConfigApplicationContext作为Spring容器,接受输入一个配置类作为参数;

②获得声明配置的UseFunctionService的Bean。

如图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值