首页 > 其他分享 >3_基于注解管理Bean对象

3_基于注解管理Bean对象

时间:2024-03-05 19:13:43浏览次数:19  
标签:基于 Autowired Spring public Bean 注解 class

基于注解管理Bean对象

1. 基本介绍

Spring通过注解实现自动装配的步骤如下:

  • 引入依赖
  • 开启组件扫描
  • 使用注解定义Bean
  • 依赖注入

Spring默认不使用注解配置bean,因此需要我们在Spring的配置文件中配置context:component-scan元素开启Spring Beans的自动扫描功能。开启此功能后,Spring会从指定的包(base-package属性设置)及子包下的所有类,如果类上使用了@Component注解,九江该类注册到容器中。

<?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">
    <!-- 开启组件扫描 -->
    <context:component-scan base-package="com.lily">

    </context:component-scan>
</beans>

编写实体类User.java

@Component(value = "user")  //<bean id="User" class com.lily.bean.User>
public class User {

}

测试:

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

2. 使用注解定义bean

Spring提供了以下多个注解,这些注解可以直接标记在Java类上,将它们定义成Spring Bean。

注释 说明
@Component 该注解用于描述Spring的Bean,它是一个泛化的概念,仅仅表示容器中的一个组件(Bean),并且可以作用在应用的任何层次,例如Service层的,Dao层等,使用时只需要将该注解标记在相应的类上即可。
@Repository 该注解用于将数据访问层(Dao层)的类标识符为Spring中的Bean,其功能与@Component功能相同。
@Service 该注解通常作用在业务层(Service层),用于将业务层的类标识为Spring的Bean,其功能与@Component功能相同。
@Controller 该注解通常作用在控制层(Controller层),用于将控制层的类标识为Spring的Bean,其功能与@Component功能相同。

3. 使用Autowired进行注入

单独使用@Autowired注解注入,默认是根据类型装配的【ByType】

4 使用Autowired和Qualifier注解联合注入

如果@Autowired要根据名称注入的话,需要配合@Qualifier注解一起配合使用。

5. 使用Resource进行注入

@Resource注解也可以完成属性注入,它和@Autowired注解的区别如下:

  • @Resource注解是JDK自带的,而@Autowired注解是Spring框架自己的。
  • @Resource注解默认根据名称装配(ByName),未指定name时,使用属性名作为name。通过name找不到的话会自动启动类型ByType装配。
  • @Autowired注解默认根据类型ByType装配,如果想要根据名字进行装配,则要配合@Qualifier一起使用。
  • @Resource注解用在属性上、sette方法上。
  • @Autowired注解用在属性上,setter方法上,构造方法上,构造方法参数上。

注意:如果JDK不是8版本需要引入如下依赖才能使用@Resource注解

<!-- https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api -->
<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version>
</dependency>

6. Spring全注解开发

全注解开发就是不再使用spring的配置文件,只需要编写一个配置类来代替配置文件:

@Configuration  //表明该类是配置类
@ComponentScan("com.lily")  //开启组件扫描
public class SpringConfig {
}

@Component(value = "student")
public class Student {
}

public class Main {
    public static void main(String[] args) {
        // 加载配置类
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        Student student = context.getBean("student",Student.class);
        System.out.println(student);
    }
}

标签:基于,Autowired,Spring,public,Bean,注解,class
From: https://www.cnblogs.com/lilyflower/p/18054672

相关文章

  • Java 切入点 JoinPoint的使用,用于拦截方法,与自定义注解
    这里的代码案例是外卖系统中,用于统一修改新增和更新内容中的更新时间与更新人内容,根据具体情况,在使用时进行自定义修改就行了第一部分是annotation的,因为是为了自动填充数据准备,所以创建annotation包后,在其中创建了AutoFill的注解类型/***自定义注解,用于标识某个方法需要用......
  • 基于SWIFT和Qwen1.5-14B-Chat进行大模型全参微调测试
    基于SWIFT和Qwen1.5-14B-Chat进行大模型全参微调测试环境准备基础环境操作系统:Ubuntu18.04.5LTS(GNU/Linux3.10.0-1127.el7.x86_64x86_64)Anaconda3:Anaconda3-2023.03-1-Linux-x86_64根据服务器网络情况配置好conda源和pip源,此处使用的是超算山河源服务器硬件配置:CPU......
  • SpringBoot常用注解
    SpringBoot常用注解  @SpringBootApplication=@SpringBootConfiguration+@ComponentScan+@EnableAutoConfiguration@Configuration注解能够将一个类定义为SpringBoot应用程序中的配置类,等同于spring的XML配置文件,从而使该类中的Bean对象能够被SpringIoC容器进行自动管......
  • 基于c/c++的公司职工管理系统软件的二次开发
    引言:经过在网络上的广泛搜索和比较,我了解了一款基于C/C++的公司职工管理系统软件,这款软件在基本功能方面表现相当完善,能够满足日常的使用需求。然而,在实际使用过程中,我也发现它存在一些问题和不足,所以我决定对该软件进行二次开发。原始代码:点击查看代码**main.cpp**#include......
  • SemanticKernel如何基于自有数据聊天
    效果使用gpt-3.5-turbo的效果什么是向量数据库?向量数据库是一种专为处理高维向量数据而设计的数据库系统。与传统的关系型数据库不同,向量数据库专注于存储和查询向量数据,例如图像、音频、文本等。其核心思想是将数据表示为向量形式,并通过向量之间的相似度来进行查询和分析。......
  • spring面试高频问题---spring框架中常见的注解常见注解
    Spring-框架中常见的注解1.spring常见注解2.springmvc常见注解3.springboot常见注解......
  • 基于JAVA的2048小游戏的二次开发
    引言《2048Numberpuzzlegame》是一款数字益智游戏,而《2048》的初始数字则是由2+2组成的基数4。在操作方面的不同则表现为一步一格的移动,变成更为爽快的一次到底。相同数字的方框在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出「2048」......
  • 基于JAVA的康威生命游戏二次开发
    引言:       康威生命游戏(Conway'sGameofLife)是一种基于细胞自动机的零玩家游戏,由数学家约翰·康威(JohnConway)于1970年创建。这个游戏并不是传统意义上的游戏,而是一种模拟生命演变的规则系统。康威生命游戏的“宇宙”是一个由无限的二维网格组成的平面,每个格子被称为......
  • C# WinForm基于owin创建WebApi
    在实际的项目开发中,可能会有在WinForm程序中提供Web服务器的需求。通过owin可以很方便的实现,并且可提供Web静态文件访问服务。操作方法:1.在NuGet引用owinMicrosoft.AspNet.WebApi.OwinMicrosoft.AspNet.WebApi.OwinSelfHostMicrosoft.Owin.StaticFiles2.添加服务启动配置类 ......
  • 基于preparedStatement方式优化
    1packagecom.atsyc.api.preparedstatement;23/*4*使用预编译statement完成用户登录5*6*TODO:7*防止注入攻击,演示preparedstatement完成用户登录8*/910importjava.sql.*;11importjava.util.Scanner;1213publicclassPSUserLogi......