Spring DI依赖注入setter,构造,注解,三种依赖方式的总结

2017年9月17日00:45,写个笔记

setter,构造,注解,三种依赖方式的总结



setter依赖注入总结:
先写个测试类
package Spring05;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Maintest {
UserServlet userServlet;
@Before
public void loadSpringContext(){
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("Application-DI.xml");
System.out.println(applicationContext);
userServlet=(UserServlet) applicationContext.getBean("userServlet");
System.out.println(userServlet);
}
@Test
public void save(){
userServlet.save();
}
}
1,先写一个接口类Dao.
package Spring05;
public interface  Dao  {
public void save();
public void delete();
}
2.再写两个实现类:UserDao;DepartDao;
UserDao:
package Spring05;
public class UserDao implements Dao {
public void save() {
System.out.println("保存用户......");
}
public void delete() {
System.out.println("删除用户......");
}
}
DepartDao:
package Spring05;
public class DepartDao implements Dao {
public void save() {
System.out.println("保存科室......");
}
public void delete() {
System.out.println("删除科室......");
}
}
3,再写一个模拟servlet类;
package Spring05;
public class UserServlet {
private Dao dao;
public void setDao(Dao dao) {
this.dao = dao;
}
public void save(){
dao.save();
}
public void delete(){
dao.delete();
}
}
4,配置application-DI;
<bean name="UserServlet" class="Spring05.UserServlet">//这一步是把UserServlet交给servlet容器管理
<property name="dao" ref="DepartDao"></property>      //这一步等于是给servlet里面的Dao dao新建一个对象,这个对象具体实现的是

ref="DepartDao",也就是实现的DepartDao里面的方法,说白了,就跟Dao dao=new DepartDao();是一样的ref="DepartDao"就是new DepartDao(),如果

ref="UserDao",也就是new UserDao()

</bean>
<bean name="UserDao" class="Spring05.UserDao"></bean>//这一步是把UserServlet交给servlet容器管理,也就是准备被上面的UserServlet引用;
<bean name="DepartDao" class="Spring05.DepartDao"></bean>
构造依赖注入总结:

构造基本跟setter是一样的,就吧UserServlet里面的set方法换成有参构造方法,然后application-DI里面的

<property name="dao" ref="DepartDao"></property>  换成<constructor-arg index="0" ref="UserDao"></constructor-arg>即可 


注解依赖:
注解依赖不需要配置很复杂的把Bean交给Spring容器管理,只需要在application.xml里配置自动注解
<!-- 注解 -->
<!-- 自动扫描Spring05下面的包 ,被扫描的包里面如果想让哪个类里被扫描到需要在类前面加上@commponent
<context:component-scan base-package="Spring05"/>
<!--  -->
<context:annotation-config/>
</beans>
然后在几个需要实依赖关系的类里面都加上@commponent注解这样就是吧bean交给了Spring容器管理了,
然后在UserServlet里的属性前面加上@Resource//这个就跟set依赖注入里application需要交个Spring容器的时候配置的属性是一样的,这个就是自动当做属性配置进去了
然后问题就来了,那么既然是自动注入依赖的,因为UserDao DepartDao都实现的Dao接口,在UserServlet自动依赖dao属性的时候系统不知道依赖谁,会报找

到两个实现类的错误,解决方案就是在这两个的其中一个的注解后面加上("dao")他就是指定的实现类,@Component("dao")

自动注解中@commponent跟 手动配置的   <bean name="UserServlet" class="Spring05.UserServlet">
<bean name="UserDao" class="Spring05.UserDao"></bean>
<bean name="DepartDao" class="Spring05.DepartDao"></bean>是一样的,作用是交给Spring容器管理


@Resource/@Autowired跟 手动配置的
<property name="dao" ref="DepartDao"></property>
<constructor-arg index="0" ref="UserDao"></constructor-arg>是一样的,作用是依赖注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值