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

spring-IOC使用注解

一、注解开发定义bean

1、使用@Component注解定义bean

@Component("bookDao")
public class BookDaoImpl implements BookDao {
}

@Component
public class BookServiceImpl implements BookService {
}

2、核心配置文件中通过组件扫描加载bean

<context:component-scan base-package="org.example"/>

3、spring提供@Component注解的三个衍生注解

@Controller——用于表现层bean定义

@Service——用于业务层bean定义

@Repository——用于数据层bean定义

@Repository("bookDao")
public class BookDaoImpl implements BookDao {
}

@Service
public class BookServiceImpl implements BookService {
}

二、纯注解开发

1、java类替代配置文件

Spring3.0开启了纯注解开发模式,使用java类替代配置文件,开启了Spring快速开发赛道,就是那个麻烦的配置文件不用写了


@Configuration
@ComponentScan("org.example")
public class SpringConfig {

}

//@Configuration注解用于设定当前类为配置类
//@ComponentScan注解用于设定扫描路径,此注解只能添加一次,如果是多个就用数组格式

2、初始化容器对象切换为读取Java配置类初始化容器对象

//加载配置文件初始化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

//加载配置类初始化容器(括号里面的内容改成这个样子)
Applicationcontext ctx= new AnnotationconfigApplicationContext(SpringConfig.class);

三、使用注解依赖注入

1、引用类型

(1)、使用@Autowired注解开启自动装配模式

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;

    /*public void setBookDao(BookDao bookdao) {
        this.bookDao = bookdao;
    }*/

    @Override
    public void save() {
        System.out.println("book service save...");
        bookDao.save();
    }
}

注意:

自动装配是基于反射设计的创建对象并暴力反射对应的属性为私有属性初始化数据,因此无需提供setter方法。

自动装配建议使用无参构造方法创建对象,如果不提供对应的构造方法,要提供唯一的构造方法。

(2)、使用@Qualifier注解开启指定名称装配bean

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    @Qualifier
    private BookDao bookDao;

}

注意:@Qualifier注解必须配合@Autowired注解使用。

2、简单类型

(1)、使用@Value注解实现简单类型的注入

@Repository("bookDao")
public class BookDaoImpl implements BookDao {
    @Value("999")
    private String name;//用于简单类型的依赖注入
    public void save() {
        System.out.println("book dao save..."+name);
    }
}

(2)、使用@PropertySource注解加载外部Properties文件

@Configuration
@ComponentScan("org.example")
@PropertySource("jdbc.properties")
public class SpringConfig {
}

注意:路径仅支持单一的文件配置,多个文件使用数组格式,并且不允许使用通配符*。

四、第三方管理bean

1、使用@Bean配置第三方bean

(1)、编写独立的类

package org.example.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
    //1、定义一个方法获得要管理的对象
    @Bean//2、添加bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/heihei");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }
}

(2)、 Springconfig配置类中用@Import注解

@Configuration
@Import({JdbcConfig.class})
public class SpringConfig {

}
public class App {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext c=new AnnotationConfigApplicationContext(SpringConfig.class);
        DataSource dataSource = c.getBean(DataSource.class);
        System.out.println(dataSource);
    }
}

四、第三方bean依赖注入

1、简单类型依赖注入

public class JdbcConfig {
@Value("com.mysql.jdbc.Driver") 
private String driver;
@Value("jdbc:mysql://localhost:3306/heihei") 
private String url;
@Value("root" )
private String userName;
@Value("123456")
private String password;
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource(); 
ds.setDriverClassName(driver);
ds.seturl(url);
ds.setUsername(userName);
ds.setPassword(userName); 
return ds;
}

2、引用类型依赖注入

@Bean
public DataSource dataSource(BookService bookService){
Systen.out.println(bookService);
DruidDataSource ds = new DruidDataSource( );
//属性设置
return ds;
}

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


http://www.kler.cn/a/392076.html

相关文章:

  • 什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性
  • 界面控件Kendo UI for Angular中文教程:如何构建带图表的仪表板?(一)
  • Spark:不能创建Managed表,External表已存在...
  • Electron 项目启动外部可执行文件的几种方式
  • vue3+element-plus==> el-form输入响应式失效踩坑!!!!!!!!!!
  • 【pytorch】常用强化学习算法实现(持续更新)
  • Python的面向对象
  • SpringBoot+Vue,尽享个性化音乐推荐与分享的网站
  • 揭秘均值抽样分布:因果推断的统计学基础
  • 如何在 Spring Boot 中启用定时任务
  • 【银河麒麟】时间同步工具chrony与ntp对比
  • golang分布式缓存项目 Day2 单机并发缓存
  • labview拆解日期字符串
  • 【大数据学习 | HBASE高级】mr操作hbase
  • MySQL技巧之跨服务器数据查询:基础篇-更新语句如何写
  • 音视频入门基础:MPEG2-TS专题(3)——TS Header简介
  • 从零开始使用YOLOv11——Yolo检测detect数据集自建格式转换为模型训练格式:20w+图片1w+类别代码测试成功
  • PointMamba: A Simple State Space Model for Point Cloud Analysis——点云论文阅读(10)
  • 边缘计算与推理算力:智能时代的加速引擎
  • 开源大模型推理引擎现状及常见推理优化方法总结
  • ubontu安装anaconda
  • 简单理解回调函数
  • Jenkins配置步骤
  • Spring学习笔记_30——事务接口PlatformTransactionManager
  • 汽车牌照识别系统的设计与仿真(论文+源码)
  • Vue 组件间传值指南:Vue 组件通信的七种方法