依赖注入:
耦合具有两面性,一方面,紧耦合的代码难以测试,难以复用,而适当的耦合又是必须的,没有耦合的代码什么也做不了。
因此,依赖注入通过注入已经生成的实例,如此一来,该实例即属于某个对象,也可以被第三方所控制,更改,以及检测,因为第三方拥有这个实例的控制权。比如说,一个人用Iphone, 之前他是自己去买一个iphone,所以一旦Iphone版本升级,他使用手机的操作需要改变。而现在,上帝给他一个全新的手机,他所使用的操作就那么些,真正的实现在于iphone,并且,上帝能够知道,他使用了哪些功能,有没有成功。
Spring中用的则是IoC container.
IoC container

通过configuration中的Metadata, Spring Container会生成相应的POJO, 然后一个完整的系统就产生了。
其中有三种Configuration, 一种是在xml中添加,一种是在Java代码中标注,然后是Annotation.
xml configuration

如图上,如果一个paymentAction中需要logger的话,那么要按如上新建一个bean,设置id, class了之后, 再在payment里面建一个constructor
Annotation

在代码中,可以加入@Component和@Autowire来实现configuration, 这样的话就会被自动注入了.
其中
@Component是指被Spring管理的组件
@Controller y哦你过来标记presentation层(web controller)
@Repository用来标记persistance层(DAO层)
@Service层则用来标记Service层
@Configuration: 指的是包含一个或多个Bean的methods,然后由Spring container来生产bean。通常Configuration要满足以下要求:
配置类必须以类的形式提供(不能是工厂方法返回的实例),允许通过生成子类在运行时增强(cglib 动态代理)。
配置类不能是 final 类(没法动态代理)。
配置注解通常为了通过 @Bean 注解生成 Spring 容器管理的类,
配置类必须是非本地的(即不能在方法中声明,不能是 private),non-static
JavaConfiguration
标记需要生成的Bean,因为一眼就能够看出对象和被注入物体的关系,

网友评论