d
2017-09-05
DI(依赖注入)
依赖注入的基本原则是:应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由IoC容器负责,“查找资源”的逻辑应该从应用组件的代码中抽取出来,交给IoC容器负责。
AOP (面向切面编程)
将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,行成一个可重用模块,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。
横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。
Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
实现AOP的技术
主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
AOP技术的基本术语
join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个 join point。point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。advice(通知):是point cut 的执行代码,是执行“切面”的具体逻辑。aspect(切面):point cut 和 advice 结合起来就是 aspect,它类似于 OOP 中定义的一个类,但它代表的更多是对象间横向的关系。introduce(引入): 为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的 AOP 工具又将其称为 mixin 。
自动化装配 bean
Spring从两个角度来实现自动化装配
- 组件扫描:Spring会自动发现应用上下文中所创建的 bean。
- 自动装配:Spring自动满足 bean 之间的依赖。
Spring提供了三种主要的装配机制,可以根据自己的喜好任选一种方式来使用。
- 在XML中进行显示配置
- 在Java中进行显示配置
- 隐式的bean发现机制和自动装配
@Component
该注解使用在类定义上,表明该类会作为组件类,并告知 Spring 要为这个类创建 bean。
如果我们没有为该 bean 显示置顶id的话,Spring 会将类名的第一个字母变为小写,以作为该 bean 的 id。
//@Component
@Component("helloBean")
public class Hello{
}
开启组件扫描
组件扫描并不是默认启动的。我们还需要显示的配置 Spring, 从而命令它去寻找带有 @Component 注解的类,并为其创建 bean
在java中显示配置:
按默认规则,它会以配置类所在的包作为基础包来扫描组件。
@Configuration
@ComponentScan
public class ApplicationConfig{
}
显式指定基础包来扫描组件
@ComponentScan("site.wending")
或
@ComponentScan(basePackages={"site.wending.aaa","site.wending.bbb"})
扫描某一类或接口所在包
在xml文件中显示配置
<?xml version="1.0" encoding="utf-8">
<beans ···>
<context:component-scan base-package="site.wending"/>
</beans>
Spring的单元测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=ApplicationConfig.class)
public class MainTest{
}
SpringJUnit4ClassRunner 会在则是开始的时候自动创建Spring的应用上下文。
@ContextConfiguration会告诉它要在 ApplicationConfig 中加载配置。

浙公网安备 33010602011771号