Spring依赖注入与第三方Bean管理基础详解

作者:给我手牵你走~~ 时间:2022-09-08 20:45:55 

1. 注解开发依赖注入

1.1 使用@Autowired注解开启自动装配模式

@Service
public class BookServiceImpl implements BookService {
   //@Autowired:注入引用类型,自动装配模式,默认按类型装配
   @Autowired
   private BookDao bookDao;
   public void save() {
       System.out.println("book service save ...");
       bookDao.save();
   }
}

说明:不管是使用配置文件还是配置类,都必须进行对应的Spring注解包扫描才可以使用。@Autowired默认按照类型自动装配,如果IOC容器中同类的Bean有多个,那么默认按照变量名和Bean的名称匹配,建议使用@Qualifier注解指定要装配的bean名称

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

1.2 使用@Qualifier注解指定要装配的bean名称

目的:解决IOC容器中同类型Bean有多个装配哪一个的问题

@Service
public class BookServiceImpl implements BookService {
   //@Autowired:注入引用类型,自动装配模式,默认按类型装配
   @Autowired
   //@Qualifier:自动装配bean时按bean名称装配
   @Qualifier("bookDao")
   private BookDao bookDao;
   public void save() {
       System.out.println("book service save ...");
       bookDao.save();
   }
}

注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用

1.3 使用@Value实现简单类型注入

package com.lin.dao.impl;
import com.lin.dao.BookDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
@Repository
public class BookDaoImpl implements BookDao {
   @Value("${name}")
   private String name;
   public void save() {
       System.out.println("Dao中的save"+" "+name);
   }
}

以上@Value注解中使用${name}从属性文件中读取name值,那么就需要在配置类或者配置文件中加载属性文件。

@Configuration
@ComponentScan("com.itheima")
//@PropertySource加载properties配置文件
@PropertySource({"classpath:jdbc.properties"}) //{}可以省略不写
public class SpringConfig {
}

注意:@PropertySource()中加载多文件请使用数组格式配置,不允许使用通配符*

2. 注解开发管理第三方Bean

2.1 单独定义配置类

public class JdbcConfig {
   //@Bean:表示当前方法的返回值是一个bean对象,添加到IOC容器中
   @Bean
   public DataSource dataSource(){
       DruidDataSource ds = new DruidDataSource();
       ds.setDriverClassName("com.mysql.jdbc.Driver");
       ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
       ds.setUsername("root");
       ds.setPassword("root");
       return ds;
   }
}

2.2 将独立的配置类加入核心配置

@Import注解导入式

@Configuration
@ComponentScan("com.itheima")
//@Import:导入配置信息
@Import({JdbcConfig.class})
public class SpringConfig {
}

3.注解开发为第三方Bean注入资源

3.1 简单类型依赖注入

3.1.1 新建jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/db1
jdbc.username=root
jdbc.password=1234

3.1.2 在配置类或者配置文件中加载属性文件。

Spring依赖注入与第三方Bean管理基础详解

3.1.3 使用EL表达式读取properties属性文件中的内容

package com.lin.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
   @Value("${jdbc.driver}")
   private String driverName;
   @Value("${jdbc.url}")
   private String url;
   @Value("${jdbc.username}")
   private String userName;
   @Value("jdbc.password")
   private String password;
   @Bean
   public DataSource getDataSource(){
       DruidDataSource dataSource = new DruidDataSource();
       dataSource.setDriverClassName(driverName);
       dataSource.setUrl(url);
       dataSource.setUsername(userName);
       dataSource.setPassword(password);
       return dataSource;
   }
}

3.2 引用类型依赖注入

//Spring会自动从IOC容器中找到BookDao对象赋值给参数bookDao变量,如果没有就会报错。
@Bean
public DataSource dataSource(BookDao bookDao){
   System.out.println(bookDao);
   DruidDataSource ds = new DruidDataSource();
   ds.setDriverClassName(driver);
   ds.setUrl(url);
   ds.setUsername(userName);
   ds.setPassword(password);
   return ds;
}

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

4. 注解开发总结

Spring依赖注入与第三方Bean管理基础详解

来源:https://blog.csdn.net/m0_69954721/article/details/128375237

标签:Spring,依赖注入,Bean
0
投稿

猜你喜欢

  • 详解Spring Cloud Zuul 服务网关

    2021-11-15 19:24:19
  • C++链表节点的添加和删除介绍

    2023-08-23 02:32:09
  • Android RecyclerView多类型布局卡片解决方案

    2022-06-18 17:39:09
  • Android中EditText和AutoCompleteTextView设置文字选中颜色方法

    2022-12-05 04:45:30
  • Flutter验证码输入框的2种方法实现

    2023-07-17 16:22:07
  • Unity3D使用Shader实现腐蚀消失

    2022-01-07 20:57:59
  • Java 数据结构与算法系列精讲之队列

    2023-09-26 21:10:31
  • java中获取json的所有key方法

    2023-10-15 06:15:26
  • Java开发人员需知的十大戒律

    2023-09-17 07:33:50
  • C#算法函数:获取一个字符串中的最大长度的数字

    2022-12-25 10:20:04
  • 理解Java中的内存泄露及解决方法示例

    2023-04-24 23:19:51
  • 详解Springboot对多线程的支持

    2023-09-21 02:18:21
  • C#实现语音播报功能

    2023-06-26 20:35:26
  • android中处理各种触摸事件的方法浅谈

    2021-06-25 00:51:57
  • 利用C#代码将html样式文件与Word文档互换的方法

    2022-04-22 07:11:31
  • maven的生命周期及常用命令介绍

    2022-03-10 17:21:16
  • Java利用Dijkstra算法求解拓扑关系最短路径

    2021-08-24 10:30:54
  • Android Drawable及其相关类的使用

    2023-10-18 09:32:38
  • Android搜索结果显示高亮实例(有数据滑动底部自动刷新)

    2021-09-25 22:55:07
  • JAVA OutputStreamWriter流的实现

    2021-08-12 19:45:47
  • asp之家 软件编程 m.aspxhome.com