d

2017-09-05

DI(依赖注入)

依赖注入的基本原则是:应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由IoC容器负责,“查找资源”的逻辑应该从应用组件的代码中抽取出来,交给IoC容器负责。

AOP (面向切面编程)

将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,行成一个可重用模块,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。

横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。

Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

实现AOP的技术

主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;

二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

AOP技术的基本术语

  1. join point(连接点) :是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个 join point。
  2. point cut(切入点) :本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。
  3. advice(通知) :是point cut 的执行代码,是执行“切面”的具体逻辑。
  4. aspect(切面) :point cut 和 advice 结合起来就是 aspect,它类似于 OOP 中定义的一个类,但它代表的更多是对象间横向的关系。
  5. introduce(引入): 为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的 AOP 工具又将其称为 mixin 。

自动化装配 bean

Spring从两个角度来实现自动化装配

  1. 组件扫描:Spring会自动发现应用上下文中所创建的 bean。
  2. 自动装配:Spring自动满足 bean 之间的依赖。

Spring提供了三种主要的装配机制,可以根据自己的喜好任选一种方式来使用。

  1. 在XML中进行显示配置
  2. 在Java中进行显示配置
  3. 隐式的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 中加载配置。

posted @ 2018-02-13 15:27  wending_63  阅读(150)  评论(0)    收藏  举报