DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
bean注入:
Bean注入的方式有两种,一种是在 中配置,此时分别有属性注入、构造函数注入和工厂方法注入;另一种则是使用注解的方式注入 。
一,spring依赖注入五种方式:
- 属性注入(即通过setXxx()方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式)
- 构造函数注入(使用构造函数注入的前提是Bean必须提供带参数的构造函数)
- 工厂方式注入(分为:1.非静态工厂方法 必须实例化工厂类后才能调用工厂 ,工厂类负责创建一个或多个目标类实例,工厂类方法一般以接口或抽象类变量的形式返回目标类实例,工厂类对外屏蔽了目标类的实例化步骤,调用者甚至不用知道具体的目标类是什么 2.静态工厂方法 用户在无须创建工厂类实例的情况下就可以调用工厂类方法,因此,静态工厂方法比非静态工厂方法的调用更加方便)
- 目前使用最广泛的 @Autowired:自动装配
<beans ns=\"http://www.spring work.org/schema/beans\"
ns:xsi=\"http://www.w3.org/2001/ Schema-instance\"
xsi:schemaLocation=\"http://www.spring work.org/schema/beans
http://www.spring work.org/schema/beans/spring-beans.xsd\">
<!--
模拟spring执行过程
创建service实例:BookService bookService = new BookServiceImpl() IoC <bean>
创建dao实例:BookDao bookDao = new BookDaoImpl() IoC
将dao设置给service:bookService.setBookDao(bookDao); DI <property>
<property> 用于进行属性注入
name: bean的属性名,通过setter方法获得
setBookDao ##> BookDao ##> bookDao
ref :另一个bean的id值的引用
-->
<!-- 创建service -->
<bean id=\"bookServiceId\" class=\"com.itheima.b_di.BookServiceImpl\">
<property name=\"bookDao\" ref=\"bookDaoId\"></property>
</bean>
<!-- 创建dao实例 -->
<bean id=\"bookDaoId\" class=\"com.itheima.b_di.BookDaoImpl\"></bean>
</beans>
静态工厂方式注入
单例模式(设计模式)
public class DBUtil {
//构造方法私有化
private DBUtil(){}
//创建一个对象实例
private static DBUtil instance = new DBUtil(); //若没有static,则不能返回,为什么?
//获取对象
public static DBUtil getInstance(){
return instance;
}
public void test(){
System.out.println(\"调用DBUtil的test方法\");
}
在spring配置文件加入以下代码
<!--工厂方法注入-->
<bean id=\"dbUtils\" class=\"com.etc.utils.DBUtil\" factory-method=\"getInstance\"></bean>
二, 使用注解的方式自动注入
需要先在Spring配置文件加入扫描
<!-- 配置组件扫描器 就是说明你的bean注解在哪个包下 -->
<context:component-scan -package=\"com.cn.*\"></context:component-scan>
通过@Autowired或@Resource来实现在Bean中自动注入的功能
继续阅读与本文标签相同的文章
JAV学习笔记—IO相关类
-
PostgreSQL系统隐藏字段
2026-05-18栏目: 教程
-
7月24日阿里云峰会.上海 开发者大会回看
2026-05-18栏目: 教程
-
aPaaS平台是什么?aPaaS与PaaS有什么区别?
2026-05-18栏目: 教程
-
【从入门到放弃-ZooKeeper】ZooKeeper实战-分布式队列 | 9月18号栖夜读
2026-05-18栏目: 教程
-
Docker日志收集最佳实践
2026-05-18栏目: 教程
