10 06 2025

一、概念介绍:


IOC不是一种技术而是一种设计思想,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。


在传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;


何为控制反转(DI)?


传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;


因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;


哪些方面反转了?依赖对象的获取被反转了。 所有的类的创建、销毁都由 Spring 来控制,也就是说控制对象生存周期的不再是引用它的对象,而是 Spring。对于某个


具体的对象而言,以前是它控制其他对象,现在是所有对象都被 Spring 控制,所以这叫控制反转。


依赖注入的方式:


构造器注入


构造器注入,顾名思义就是被注入的对象通过在其构造方法中声明依赖对象的参数列表,让外部知道它需要哪些依赖对象。


构造器注入方式比较直观,对象构造完毕后就可以直接使用,这就好比你出生你家里就给你指定了你媳妇。


setter 方法注入


对于 JavaBean 对象而言,我们一般都是通过 getter 和 setter 方法来访问和设置对象的属性。所以,当前对象只需要为其所依赖的对象提供相对应的 setter 方法,就


可以通过该方法将相应的依赖对象设置到被注入对象中。


相比于构造器注入,setter 方式注入会显得比较宽松灵活些,它可以在任何时候进行注入(当然是在使用依赖对象之前)


接口方式注入


接口方式注入显得比较霸道,因为它需要被依赖的对象实现不必要的接口,带有侵入性。一般都不推荐这种方式。


二:样例:


创建一个请求基类对象,采用@Component 注解,告知该类为 组件类,交由spring容器管理。


@Component
@Data
public class CrmGetObjectRequest implements Serializable {
  private static final long serialVersionUID = -2399099937047070919L;
  private String dataObjectApiName;
  private String objectDataId;
}


@Component和@Bean 注解的区别,可以自行查询。


需要使用该类的服务层


@Resource
CrmQueryObjectRequest crmQueryObjectRequest;


使用@Resource 和使用@Autowired 效果是一样的,具体两者区别可以自行查询。