spring IOC容器的三种注入方式
spring IOC容器的三种注入方式set方法注入把需要注入的类写成属性,给它设置一个set方法。实现代码如下:public class B {private A a;public void setA(A a){this.a == a;}}接着在配置文件中类A注入到类B里面去<bean id="aa" class=
·
spring IOC容器的三种注入方式
- set方法注入
把需要注入的类写成属性,给它设置一个set方法。实现代码如下:
public class B {
private A a;
public void setA(A a){
this.a == a;
}
}
接着在配置文件中类A注入到类B里面去
<bean id="aa" class="com.study.jyl.A"></bean>
<bean id="bb" class="com.study.jyl.B">
<property name="a" ref="aa"></property>
</bean>
这样就完成了一个简单的set方法注入操作
- 构造器注入
同set方法注入一样,首先把需要注入的类写成属性,然后使用构造方法。实现代码如下:
public class B {
private A a;
public B(A a){
this.a == a;
}
}
接着在配置文件中
<bean id="aa" class="com.study.jyl.A"></bean>
<bean id="bb" class="com.study.jyl.B">
<constructor-arg name="a" ref="aa"></constructor-arg>
</bean>
这样就完成了一个简单的构造器注入操作
- 注解注入
使用注解连线,默认情况下在spring容器中是不打开的。
所以在我们使用注解注入时,需要在配置文件中加上<context:annotation-config/>来启动它
常用的几个注解:
@Required
应用于bean属性的setter方法
使用该注解的属性必须在配置文件中设置,否则容器会抛出一个BeanlnitializationException异常
public class B {
private A a;
@Required
public void setA(A a){
this.a == a;
}
}
@Autowired
自动按照类型注入
类型不唯一时,他会把属性名作为bean的id在容器中查找
public class B {
private A a;
@Autowired
public void setA(A a){
this.a == a;
}
}
@Qualifier
在按照类型注入的基础上,再按照bean的id注入。
他在类成员注入数据时,不能独立使用,但是在给方法的形参注入数据时,可以独立使用。
属性value用于指定bean的id
@Resource
使用属性name指定bean的id
@Configuration 和 @Bean
@Configuration 表示这个类可以使用spring IOC容器作为bean定义的来源
@Bean 返回一个对象,该对象被注册为spring应用程序上下文中的bean
不需配置XML文件,直接采用注解
@Configuration
public class C {
@Bean
public A a(){
System.out.println("创建A的bean");
return new A();
}
@Bean
public B b(){
System.out.println("创建B的bean");
return new B(a());
}
}
使用类的反射去拿到对象:
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new AnnotationConfigApplicationContext(C.class);
B b = (B) ac.getBean(B.class);
b.bb();
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)