Spring的注解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Spring框架注解简化了Java应用开发,通过元数据替代XML配置。`@Component`、`@Controller`、`@Service`、`@Repository`都是组件注解,用于标记不同层的类,如`@Controller`用于控制层,`@Service`业务层,`@Repository`数据访问层。它们均会被组件扫描加入IOC容器,`@Component`是通用形式。通过`@ComponentScan`可以配置扫描规则,包括排除和包含特定类型的组件。`@Autowired`自动装配依赖,`@Value`能从属性文件读取值注入字段。`

1. 注解仅仅是标记

Spring框架的注解用途广泛,极大地简化了Java企业级应用的开发。注解通过提供元数据来替代传统的XML配置方式,让开发者能够通过简单的声明方式控制各种Spring框架的特性,从而实现依赖注入、面向切面编程等功能。

2. spring中提供的四个注解:

@Component @Controller , @Service , @Repository

  1. @Component : 一个类被@Component修饰,表示这个类的实例将会被纳入IOC容器管理
  2. <context:component-scan base-package="" /> 组件扫描

  1. @Controller , @Service , @Repository 这三个都是 @Component的别名 分别应用在不同的"场合",场合指的是不同的层(控制层、业务逻辑层、数据访问层) 所以,

@Controller表示控制层组件;

@Service表示业务逻辑层组件;

@Repository表示数据访问层组件

3. 组件扫描的细节语法

  1. exclude-filter :表示排除掉Controller组件

  1. include-filter :表示扫描Controller组件 , 需要注意:禁用默认的过滤规则  use-default-filter="false"

4. 使用注解时,beanName的问题

  1. 默认情况下,beanName就是类名首字母小写
  2. 我们也可以指定beanName

xml

复制代码

<bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.pwd}"/>
</bean>

5. @Autowire - 自动装配

  1. 语法  :定义一个全局变量,在该变量上方注入

  1. 自动装配的流程和原理
  • ① 首先根据类型查找并装配。如果找到并且唯一,则装配成功
  • ② 否则,继续根据名称查找,如果找到,则装配成功。
  • ③ 如果想根据自己指定的名称去装配,则使用@Qualifier

6. @Value - 读取properties文件中的数据给属性赋值

1.新建 book.properties 文件

2.新建 Book 类

java

复制代码

@Component
@Data
//读取classpath路径下的book.properties
@PropertySource(value ="classpath:book.properties",encoding = "UTF-8") 
public class Book {
    @Value("${book.bname}")
    private String bname ;
    @Value("${book.price:0}")
    private Integer price ;
    @Value("${book.author}")
    private String author ;
}

7. @Configuration  配置类

标注一个类为配置类

8. AnnotationConfigApplicationContext

用来加载配置类,形成IOC容器

java

复制代码

beanFactory = new AnnotationConfigApplicationContext(MyConfiguration.class);

9. @Bean用来定义一个方法的返回值纳入IOC容器管理

java

复制代码

@Bean(name="ds2")  // 将下面这个方法的返回值纳入IOC容器管理
public DataSource createDataSource(@Value("${jdbc.driver}") String driverClassName ,
                                   @Value("${jdbc.url}") String url ,
                                   @Value("${jdbc.username}") String username ,
                                   @Value("${jdbc.pwd}") String pwd ){
    DruidDataSource ds = new DruidDataSource();
    ds.setDriverClassName(driverClassName);
    ds.setUrl(url);
    ds.setUsername(username);
    ds.setPassword(pwd);
    return ds ;
}

10.@Bean修饰的方法参数,会自动从IOC容器中寻找并自动装配

xml

复制代码

@Bean(name="tiger001",initMethod = "eat",destroyMethod = "sleep")

11.@Import的作用

@Import 是一个用于将其他配置类导入当前配置类的注解。

12.@Conditional

  1. @Conditional表示条件化注解
  2. 条件化注解需要条件对象。我们使用Condition表示条件对象。因此需要一个类实现Condition接口
  3. Condition接口中有一个match方法,返回boolean。如果true,则表示条件成立。否则,条件不成立,不创建bean实例。

1.创建MyCondition类

java

复制代码

public class MyCondition  implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        boolean flag = context.getBeanFactory().containsBeanDefinition("getTiger");
        return flag ;
    }
}

2.定义一个方法

java

复制代码

@Bean("m")
@Conditional(MyCondition.class)
public Monkey createMonkeyInstance(){
    return new Monkey();
}

13.spring6和junit5集成

  1. 添加依赖:spring-test
  2. 在测试类上添加一个注解:@SpringJunitConfig @SpringJunitConfig(MyConfiguration.class) @SprintJunitConfig()

xml

复制代码

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>6.0.11</version>
    <scope>test</scope>
</dependency>

java

复制代码

//@SpringJUnitConfig(MyConfiguration.class)
@SpringJUnitConfig(locations = "classpath:applicationContext.xml")
public class IOCTest3 {

    @Autowired
    @Qualifier("ds2")
    private DataSource dataSource ;

    @Test
    public void test02() throws SQLException {
        System.out.println(dataSource.getConnection());
    }
}


转载来源:https://juejin.cn/post/7346505279877431311

相关文章
|
7月前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
107 0
|
4月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
324 26
|
5月前
|
缓存 Java 数据库
SpringBoot缓存注解使用
Spring Boot 提供了一套方便的缓存注解,用于简化缓存管理。通过 `@Cacheable`、`@CachePut`、`@CacheEvict` 和 `@Caching` 等注解,开发者可以轻松地实现方法级别的缓存操作,从而提升应用的性能和响应速度。合理使用这些注解可以大大减少数据库的访问频率,优化系统性能。
261 89
|
3月前
|
JSON 前端开发 Java
Spring MVC常用的注解
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中 的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 @Controller:控制器的注解,表示是表现层,不能用用别的注解代替 @RestController : 组合注解 @Conntroller + @ResponseBody @GetMapping , @PostMapping , @Put
|
3月前
|
Java Spring
Spring Boot的核心注解是哪个?他由哪几个注解组成的?
Spring Boot的核心注解是@SpringBootApplication , 他由几个注解组成 : ● @SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功能; ● @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项 ● @ComponentScan:Spring组件扫描
|
3月前
|
Java 测试技术 Spring
SpringBoot+@Async注解一起用,速度提升
本文介绍了异步调用在高并发Web应用性能优化中的重要性,对比了同步与异步调用的区别。同步调用按顺序执行,每一步需等待上一步完成;而异步调用无需等待,可提升效率。通过Spring Boot示例,使用@Async注解实现异步任务,并借助Future对象处理异步回调,有效减少程序运行时间。
|
6月前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
247 73
|
2月前
|
人工智能 缓存 自然语言处理
保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!
这是一份详尽的 Spring AI 注解式开发教程,涵盖从环境配置到高级功能的全流程。Spring AI 是 Spring 框架中的一个模块,支持 NLP、CV 等 AI 任务。通过注解(如自定义 `@AiPrompt`)与 AOP 切面技术,简化了 AI 服务集成,实现业务逻辑与 AI 基础设施解耦。教程包含创建项目、配置文件、流式响应处理、缓存优化及多任务并行执行等内容,助你快速构建高效、可维护的 AI 应用。
|
4月前
|
监控 Java Spring
SpringBoot:SpringBoot通过注解监测Controller接口
本文详细介绍了如何通过Spring Boot注解监测Controller接口,包括自定义注解、AOP切面的创建和使用以及具体的示例代码。通过这种方式,可以方便地在Controller方法执行前后添加日志记录、性能监控和异常处理逻辑,而无需修改方法本身的代码。这种方法不仅提高了代码的可维护性,还增强了系统的监控能力。希望本文能帮助您更好地理解和应用Spring Boot中的注解监测技术。
121 16
|
3月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
71 0