1:注解方式进行属性的装配

spring提供的装配标签:autowried和qualifier。

通过@autowired注解可以让spring自动的把属性需要的对象从配置文件中找出来,并注入给该属性。

在spring3.0之前,需要在配置文件中配置<context:annotation-config/>,才会去识别@autowired注解。

@autowired注解用在属性或者setter方法上,可以同时为一个属性注入多个对象

默认情况下,@autowired注解必须要找到对应的对象,否则报错。不过,可以使用required=false来避免该问题:@autowired(...)

@autowired找bean的方式,首先按照类型去找,如果找到多个匹配的类型,再去按照名字找,如果没有匹配就报错

可以使用@Qualifier(”otherBean“)注解来规定依赖对象按照bean的id+类型去找

JavaEE提供的装配标签

@Resource注解

@Resource注解必须要求有匹配的对象

<context:annotation-config>,既引入了@Autowired标签的解析器,又引入了@Resource标签的解析器

@Resource标签找Bean的方式:首先按照名字取找,找不到再按照类型去找,如果找到多个匹配的类型,就报错

@Resource(name="xxx"):可以使用name属性指定Bean的名称。但是,如果指定了name,那么如果找不到指定名称的Bean,就不会再按照类型去找,直接报错。

@Autowired VS @Resource:

1,@Autowired:是Spring定义的标签,所以不太稳定,并且对象和spring框架关联(Spring对我们的代码有侵入);

2,@Resouce:是J2EE的规范,所以稳定,在J2EE规范容器中也能正常使用;

2:使用注解简化inversion of control

》使用注解来完成IOC,就必须要有IOC的注解解析器

使用<context:component-scan base-package=""/>来扫描spring需要管理的Bean

base-package的作用:告诉spring,去哪些包及其子包下扫描Bean

》标注Bean的注解:@Component

默认情况,bean的名字是类名首字母小写

如果要修改bean的名称,直接使用value属性来重新定义  @Component(value="xxx")

》使用Component的限制,不能运用到静态工厂方法和实例工厂方法,不能运用到没有源代码的类,框架内部类(没有源代码无法使用,不能对框架的源码进行修改)

》Bean组件版型标签

@Service:用于标注业务层组件

@Controller:用于标注控制层组件

@Repository:用于标注DAO层组件

@Component:当组件不好归类的时候,使用这个组件

》指定Bean的作用域:@Scope(”prototype“)

》初始化和销毁方法:@PostConstruct/@PreDestroy

3:装饰设计模式

什么是装饰设计模式?

就是在不改变源码的基础上,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是包裹真实的对象。说的直白点,就是对已有对象的功能的增强。

spring02

4:静态代理模式

代理模式:客户端直接使用的都是代理对象,根本不知道真实对象是谁。此时,代理对象在客户端和真实对象间起到了中介作用

》代理对象完全包含真实对象,客户端使用的都是代理对象的方法,和真实对象没有直接关系

》代理对象的职责:把不是真实对象该做的事情,从它身上撇开

静态代理:在程序运行前,就已经存在代理类的字节码文件,代理对象和真实对象的关系在程序运行前就确定了。

动态代理:动态代理类是程序运行期间由Java virtual machine通过反射等机制动态的生成的,所以不存在代理类的字节码文件。代理对象和真实对象的关系在程序运行期间才确定的。

5:AOP面向切面编程

》AOP的目的: 将那些和业务逻辑无关的,却被业务模块所共同调用的逻辑封装起来。便于减少系统的重复代码,降低模块之间的耦合度。

》AOP中的概念:

连接点(joinpoint):能做增强的方法就可以称为是连接点

切入点:(pointcut)在哪些类的哪些方法上做切入

增强(advice):在方法执行的什么时机做什么(增强的功能)

切面(Aspect):切面=切入点+增强/通知,多个通知和切入点的组合

织入(Weaving):把切面加入到对象,并创建出代理对象的过程

目标(Target):被增强的对象称为目标

6:XML方式实现AOP

AOP规范本应该由sun公司提出,但是被aop联盟捷足先登,Aop联盟制定出AOP规范后,首先就要解决一个问题,怎么表示在哪些方法上面做增强.-----AspectJ语言

AspectJ切入点语法如下:(表示哪些包下的哪些类的哪些方法做切入)

execution(修饰符?返回类型 声明类型 方法名 参数 异常)

...

 

 

相关文章: