网站注册便宜,盈科互动网站建设制作公司,可视化网站开发系统介绍,色彩设计网站目录
1. Setter注入
2. 构造器注入
3. 字段注入
4. 方法注入
5. 接口注入
6. Lookup注入
7. 注解注入 Spring框架提供了多种依赖注入#xff08;DI#xff09;的方式来管理对象之间的依赖关系。以下是Spring支持的依赖注入方式#xff1a;
1. Setter注入
定义…
目录
1. Setter注入
2. 构造器注入
3. 字段注入
4. 方法注入
5. 接口注入
6. Lookup注入
7. 注解注入 Spring框架提供了多种依赖注入DI的方式来管理对象之间的依赖关系。以下是Spring支持的依赖注入方式
1. Setter注入
定义通过类的setter方法注入依赖。举例 方式一
Component
public class MyClass {private MyDependency dependency;Autowiredpublic void setDependency(MyDependency dependency) {this.dependency dependency;}
}方式二
bean idmyDependency classcom.example.MyDependency /
bean idmyClass classcom.example.MyClassproperty namedependency refmyDependency /
/bean
2. 构造器注入
定义通过类的构造器注入依赖。举例 public class MyClass {private MyDependency dependency;public MyClass(MyDependency dependency) {this.dependency dependency;}
}方式一
bean idmyDependency classcom.example.MyDependency /
bean idmyClass classcom.example.MyClassconstructor-arg refmyDependency /
/bean方式二
Component
public class MyClass {private MyDependency dependency;Autowiredpublic MyClass(Qualifier(dependency)MyDependency dependency) {this.dependency dependency;}
} 注意1.Qualifier(dependency) 可以不写触发有多个dependency 2.在 Spring 4.3 及以后的版本中如果这个类只有一个构造方法那么这个构造方法上面也可以不写 Autowired 注解。
3. 字段注入
定义直接在类的字段上使用Autowired或Inject注解注入依赖。举例 Component
public class MyClass {Autowiredprivate MyDependency dependency;
}
4. 方法注入
定义通过方法传递依赖通常与Bean注解一起使用在配置类中。举例 Configuration
public class MyConfiguration {Beanpublic MyDependency myDependency() {return new MyDependency();}Beanpublic MyClass myClass(MyDependency myDependency) {return new MyClass(myDependency);}
}
5. 接口注入
定义通过实现特定的接口来注入依赖这种方式在Spring中不常见因为它侵入了代码。举例 public class MyClass implements MyDependencyAware {private MyDependency dependency;Overridepublic void setMyDependency(MyDependency dependency) {this.dependency dependency;}
}然后方式一
beansbean iddependency classcom.example.MyDependency/bean idmyClass classcom.example.MyClassproperty namedependency refdependency//bean
/beans方式二
Configuration
public class AppConfig {Beanpublic MyDependency dependency() {return new MyDependency();}Beanpublic MyClass myClass() {MyClass myClass new MyClass();myClass.setMyDependency(dependency());return myClass;}
}
6. Lookup注入
定义通过查找方法来注入原型作用域的依赖这在处理单例作用域Bean中注入原型作用域Bean时特别有用。 Lookup注入每次调用都会创建一个新的原型bean实例 当你使用Lookup注入方法时每次调用这个方法都会向Spring容器请求一个新的原型bean实例。Spring容器负责管理bean的生命周期包括原型bean的创建。因此每次Lookup方法被调用时都会创建一个新的原型bean并且这个新创建的bean将是一个全新的实例与之前创建的实例相互独立。这样可以确保每次操作都能使用到一个全新的对象避免了状态信息的共享和污染 使用场景在某些情况下单例bean在运行时可能需要根据不同的条件动态更换其依赖的对象。Lookup注入可以在不重新创建单例bean的情况下动态地获取新的原型bean实例。举例 public abstract class MySingletonBean {public abstract MyPrototypeBean getMyPrototypeBean();public void doSomething() {MyPrototypeBean bean getMyPrototypeBean();// 使用bean做些事情...}
}方式一、
bean idmySingletonBean classcom.example.MySingletonBean scopesingletonlookup-method namegetMyPrototypeBean beanmyPrototypeBean/
/beanbean idmyPrototypeBean classcom.example.MyPrototypeBean scopeprototype/方式二Configuration
public class AppConfig {BeanScope(singleton)public SingletonBean singletonBean() {return new SingletonBean() {Lookuppublic PrototypeBean createPrototypeBean() {// 此处实现会被Spring动态覆盖return null;}};}BeanScope(prototype)public PrototypeBean prototypeBean() {return new PrototypeBean();}
}
7. 注解注入
定义通过注解来注入依赖常用的注解有Autowired, Resource, Value, Inject等。举例 Component
public class MyClass {Resource(name myDependency)private MyDependency dependency;Autowiredprivate MyDependency2 dependency2;Value(${some.value})private String value;
}