spring依赖注入的两种方式
1.Spring中的对象都是由Spring进行统一管理,但是在对象中还存在属性,这些属性实际上引用的也是别的对象,那么这些对象也是由Spring来管理的;
2.在实际使用时,我们需要给Spring中对象的属性字段赋值,这称为依赖注入DI(Dependency Injection);
3.依赖注入又分为xml注入和注解注入。
把有依赖关系的类放到容器中,解析出这些类的实例,就是依赖注入。目的是实现类的解耦。
1.xml注入
xml注入,也叫setter注入或者属性注入
- 需要在xml文件中配置bean。
- 为字段需要提供setter方法
举个栗子:
//先创建一个类:MyBean
public class MyBean {
public MyBean() {
System.out.println("无参构造");
}
private String name;
private YouBean youBean;
public void setName(String name) {
this.name = name;
System.out.println("我是setName方法");
}
public String getName() {
return name;
}
public void setYouBean(YouBean youBean) {
this.youBean = youBean;
System.out.println("我是setYouBean");
}
/**测试*/
@Test
public void testBean() throws Exception {
//获到核心配置文件 applicationContext.xml
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean mybean = ac.getBean("myBean",MyBean.class);
YouBean youBean = ac.getBean("youBean",YouBean.class);
System.out.println("youBean======:" + mybean);
System.out.println("youBean======:" + youBean);
System.out.println("name=========:" + mybean.getName());
}
}
//YouBean类
public class YouBean {
}
在spring的配置文件中配置bean
<bean id="myBean" class="cn.itsource._02di.MyBean">
<property name="youBean" ref="youBean"/>
<property name="name" value="臭弟弟"/>
</bean>
<bean id="youBean" class="cn.itsource._02di.YouBean"></bean>
运行测试方法可以得到:
2.注解注入
通过注解实现注入,这种方式可以将注解写在setter方法上,也可以写在字段上,如果写在字段上可以不需要setter方法。
-
需要在xml文件中配置bean。
-
字段上使用注解@Autowired或者@Resource
举个栗子
//接口IBean
public interface IBean {
void play();
}
//接口的实现类Bean1
public class Bean1 implements IBean {
@Override
public void play(){
System.out.println("bean111111");
}
}
//接口的实现类Bean2
public class Bean2 implements IBean{
@Override
public void play() {
System.out.println("bean22222");
}
}
//测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class SpringTest {
@Autowired
private Bean1 bean1;
@Autowired
private Bean2 bean2;
@Test
public void testName() throws Exception {
bean1.play();
bean2.play();
}
}
<!--在spring的配置文件中配置-->
<bean id="bean1" class="cn.itsource._03test2.Bean1">
</bean>
<bean id="bean2" class="cn.itsource._03test2.Bean2">
</bean>
运行测试方法:
注意事项:在实例化Bean和注入Bean对象的同时,不要将xml方式和注解方式进行混用,要么都用xml方式,要么都用注解方式