前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring的注解

Spring的注解

作者头像
闻说社
发布2024-07-01 00:21:29
540
发布2024-07-01 00:21:29

1. 注解仅仅是标记

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

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

@Component @Controller , @Service , @Repository

  1. @Component : 一个类被@Component修饰,表示这个类的实例将会被纳入IOC容器管理
  1. <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
代码语言:javascript
复制
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 类

代码语言:javascript
复制
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容器

代码语言:javascript
复制
java复制代码beanFactory = new AnnotationConfigApplicationContext(MyConfiguration.class);

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

代码语言:javascript
复制
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容器中寻找并自动装配

代码语言:javascript
复制
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类

代码语言:javascript
复制
java复制代码public class MyCondition  implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        boolean flag = context.getBeanFactory().containsBeanDefinition("getTiger");
        return flag ;
    }
}

2.定义一个方法

代码语言:javascript
复制
java复制代码@Bean("m")
@Conditional(MyCondition.class)
public Monkey createMonkeyInstance(){
    return new Monkey();
}

13.spring6和junit5集成

  1. 添加依赖:spring-test
  2. 在测试类上添加一个注解:@SpringJunitConfig @SpringJunitConfig(MyConfiguration.class) @SprintJunitConfig()
代码语言:javascript
复制
xml复制代码<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>6.0.11</version>
    <scope>test</scope>
</dependency>
代码语言:javascript
复制
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());
    }
}

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 注解仅仅是标记
  • 2. spring中提供的四个注解:
  • 3. 组件扫描的细节语法
  • 4. 使用注解时,beanName的问题
  • 5. @Autowire - 自动装配
  • 6. @Value - 读取properties文件中的数据给属性赋值
  • 7. @Configuration 配置类
  • 8. AnnotationConfigApplicationContext
  • 9. @Bean用来定义一个方法的返回值纳入IOC容器管理
  • 10.@Bean修饰的方法参数,会自动从IOC容器中寻找并自动装配
  • 11.@Import的作用
  • 12.@Conditional
  • 13.spring6和junit5集成
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档