Spring-serivce内部依赖注入方式-Set注入
1 Controller
public static void main(String[] args) {
//通过配置转bean转为userService的实现
//获取配置文件
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取bean对象
UserService userService = app.getBean(UserService.class);
//调用dao层的save方法
userService.save();
}
2 Serivce层
public interface UserService {
void save();
}
public class UserServiceImpl implements UserService {
private UserDao userDao;
//进行set注入
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
}
public void save() {
userDao.save();
}
3 Dao层
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
private List<String> strList;
private Map<String, User> userMap;
private Properties properties;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public void save() {
System.out.println("save running");
// System.out.println(name+"======"+age);
System.out.println(strList);
System.out.println(userMap);
System.out.println(properties);
}
}
配置文件
<bean id="UserService" class="service.Impl.UserServiceImpl">
<property name="UserDao" ref="UserDao"></property>
<!--ref路径在这一步在spring内部注入了UserDao-->
</bean>
<bean id="UserService" class="service.Impl.UserServiceImpl" p:userDao-ref="UserDao"/>
图片化描述
总结
使用set注入将dao直接注入到serivce中,这样直接在Spring容器中使得serivce对象中含有了dao对象,这样在serivce对象中使用set方法指定对象产生了关联。
我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。