当前位置: 首页 > article >正文

spring 注解

@Component

作用

@Component注解的作用相当于 <bean id="bookDao" class="org.example.dao.impl.BookDaoImpl"/> 即:使用@Component后就不需要在xml中手动配置bean标签来实例化类了,但需要配合 <context:component-scan base-package="org.example"/> 标签使用

使用

 案例

补充:xml中配置context空间

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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="org.example"/>
</beans>

@Component注解的三个衍生注解

  • @Controller:用于表现层bean定义
  • @Service:用于业务层bean定义
  • @Repository:用于数据层bean定义
     

案例

Spring 纯注解开发

作用

Spring3.8升级了纯注解开发模式,使用]ava类替代配置文件,开启了Spring快速开发赛道

使用

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>6.1.12</version>
</dependency>

1.使用Java类代替Spring核心配置文件

2.使用@Configuration与@ComponentScan标签代替xml配置文件

3.读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

说明:

@Configuration注解用于设定当前类为配置类
@Componentscan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式

案例

Spring纯注解下的bean作用域及生命周期

@Scope作用域

默认bean是单例模式,使用@Scope注解可控制单例非单例模式

  • singleton 单例 默认
  • prototype 非单例
package org.example.dao.impl;

import org.example.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

@Repository
@Scope("prototype")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("BookDaoImpl save");
    }
}

生命周期

  • @PostConstrct bean执行构造方法前
  • @RreDestroy bean销毁前

 案例

package org.example.dao.impl;

import org.example.dao.BookDao;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstrct;
import javax.annotation.RreDestroy;

@Repository
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("BookDaoImpl save");
    }
    @PostConstrct
    public void init() {
        System.out.println("BookDaoImpl init");
    }
    @RreDestroy
    public void destroy() {
        System.out.println("BookDaoImpl destroy");
    }
}

Sping 纯注解模式下的 自动装配(注入)

@Autowired

作用:相当于<property name="bookDao" ref="bookDao"/> 

注意:

  • 自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
  • 自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
  • Autowired支持引用类型注入,值类型注入需要使用Value
     

案例

@Qualifier

案例

@Value

作用:相当于<property name="bookDao" value="《java入门》"/> 

 @PropertySource

@Value + @PropertySource 注入配置文件中的值

@Bean

作用:Spring 纯注解模式下管理第三方bean

使用:

以druid为例

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>

方法一:

1. 在配置类中(使用@Configuration注解的类)里创建方法获取第三方对象

2. 在创建的方法上使用@bean注解,表示方法的返回值是一个bean

案例

方法二:

1. 对于要管理的第三方bean,为其单独创建一个类来管理

2. 使用@Import注解导入管理类

注意:使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式
 

案例

第三方bean装配(注入)

1. 值类型的bean使用 成员变量+@Value 注解装配

2. 引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

package org.example.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.example.dao.BookDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class JdbcConfig {
    // @Value装配值类型bean
    @Value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://127.0.0.1:3306/test")
    private String url;
    @Value("root")
    private String username;
    @Value("123456")
    private String password;
    @Bean
    public DataSource dataSource(BookDao bookDao) {  // 形参装配引用类型bean
        System.out.println(bookDao);
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }
}

XML配置与注解配置对比


http://www.kler.cn/news/354805.html

相关文章:

  • IRP读写函数
  • 八股面试3(自用)
  • 机器学习与神经网络:物理学的新边疆
  • docker 复制文件,清除不再使用数据导出以及导出文件系统
  • 搜维尔科技:力反馈遥操作解决方案,五指灵巧手遥操作解决方案
  • Java初学者的学习顺序
  • 网络基础知识:六大交换机关键知识解析
  • 无人机之遥感影像处理篇
  • 国产 HDMI 发送芯片,兼容 HDMI1.4b 及 HDMI 1.4b 下的视频 3D 传输格式。
  • JavaScript 第9章:面向对象编程
  • 虎牙Android面试题及参考答案
  • C++ 方法积累
  • 【优选算法】(第三十六篇)
  • 【实战案例】Nacos从安装到服务注册发现再到配置中心(附常见问题解决方案)
  • 前端开发设计模式——状态模式
  • 【AIGC】寻找ChatGPT最佳推理步骤:CoT思维链技术的探索与应用
  • C# 将PDF文档转换为Markdown文档
  • Go语言Gin框架调用企业微信接口根据手机号获取userid
  • 滚雪球学Redis[7.3讲]:Redis在排行榜系统中的应用:高效构建与优化
  • 【C++刷题】力扣-#136-只出现一次的数字