spring三种注入:
1 构造器注入
2 setter注入
3 使用注解方式注入
构造器注入
0 需要准备的包
asm.jar
cglib.jar
1 类构造器中配置要注入的对象
//基本参数
private A a;
private List<Integer> list;
//构造器注入
public TestA(A a,List<Integer> list)
{
this.a = a;
this.list = list;
}
2 配置文件中配置
<bean id="a" class="com.spring.domain.A"></bean>
<bean id="testA" class="com.spring.test.TestA">
<constructor-arg index="0" type="com.spring.domain.A" ref="a" />
<constructor-arg index="1">
<list>
<value>1</value>
<value>2</value>
</list>
</constructor-arg>
</bean>
setter注入
1 类中配置要注入的对象
//基本参数
private A a;
private List<Integer> list;
private String str;
//set/get方法
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
public List<Integer> getList() {
return list;
}
public void setList(List<Integer> list) {
this.list = list;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
2 配置文件中配置
<bean id="testB" class="com.spring.test.TestB">
<property name="a" ref="a"></property>
<property name="list">
<list>
<value>1</value>
<value>2</value>
</list>
</property>
<property name="str" value="str"></property>
</bean>
使用注解方式注入
a 注解配置
<!-- 开启注解功能 -->
<context:annotation-config></context:annotation-config>
<!-- 设置注解扫描包,该设置自动开启注解功能 -->
<context:component-scan base-package="com.spring.*"></context:component-scan>
b 注册类B
package com.spring.domain;
import org.springframework.stereotype.Component;
@Component
public class B {
public String toString()
{
return "com.spring.domain.B";
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
c 注解注入bean B
@Autowird:默认按类型装配
@Autowired
private B b;
@Resource:默认按名称装配,当找不到与名称相匹配的bean时,才会按类型装配
如果@Resource的name属性没有指定,即默认以属性名称作为bean名称寻找依赖的对象
@Resource
private B b;
d 注册测试类TestC
<bean id="testC" class="com.spring.test.TestC"></bean>
e 获取测试类,测试类B是否注入成功
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
TestC test = (TestC)ctx.getBean("testC");
System.out.println(test.b.toString());
总结:
1 类的注册
//可以在spring的配置文件中配置如下:
<bean id="testC" class="com.spring.test.TestC"></bean>
//也可以通过注解的方式注册,如下:
@Component
public class B
2 类的注入可以在spring的配置文件中配置如下:
//构造器注入
<bean id="testA" class="com.spring.test.TestA">
<constructor-arg index="0" type="com.spring.domain.A" ref="a" />
</bean>
//属性注入
<bean id="testB" class="com.spring.test.TestB">
<property name="a" ref="a"></property>
</bean>
//注解注入
@Resource
private B b;