- 这两天研究了一下spring开源框架,在这里做个笔记,过段时间可以回来看看有什么错误。
spring主要的功能就是ioc控制反转和aop面向切面编程,着我们都知道,spring2.5的api文档里面也有详细解释。但是里面的解释看着云里雾里真的是看不懂,所有就实际搭建两个框架测试一下了。
**IOC控制反转**
什么是**控制反转**呢?说白了就是讲bean的创建、调用和销毁等操作都交由spring框架来实现。这样做有什么好处呢?我们在实现一个类功能的时候,肯定会依赖很多其他类来实现,一般都是new一个实例来使用,这样依赖代码的耦合度就变高,而且将功能实现类直接暴露给使用者,后期更改的时候很麻烦。
使用控制反转就不需要我们手动去创建实例来调用,而是将实例的创建交由给spring实现,我们只需要关心这个bean实现的功能是什么就可以。
控制反转的功能还是要体现在依赖注入功能里面。
依赖注入通俗解释,就是为类的成员变量赋值。一般我们依赖某个接口的时候,直接将接口注入进来,至于接口具体由那个实现类来实现,我们并不关心,这就是面向接口编程的思想。
spring依赖注入的方式,我用过的有三种。
1、set方法进行注入
2、构造器注入
3、注解的方式自动扫描、自动注入
set方法:通过set方法对引入的接口类型的属性进行初始化,初始化的实际操作在配置文件中,也就是<bean>标签下面的属性赋值。
比如:
类:class 类名{
public List lists;
public 类名 对象;
public void set(List lists,类名 对象){
this.lists=lists;
this.对象=对象;
}
}
配置文件
<beanid="名字"class="类路径">
<propertyname="引入类名">
<refbean="引入类实体bean名"/>
</property>
<propertyname="Lists">
<value>list1</value>
<value>list2</value>
</property>
</bean>
构造器注入:
class 类{
public void 构造器(类名 对象名){
this.对象名=对象名;}}
配置文件:
<beanid=""class="">
<constructor-argindex="0"ref="类路径"value="引入类id名"></constructor-arg>
</bean>
注解的方式注入: 当一个项目有几千个类的时候,再使用配置文件创建bean对象的方式就太麻烦了,而且配置文件也会很臃肿。所有2.5版本出现了注解的方式。通过配置文件自动扫描包,将有注解的类都扫描并创建实体bean。当我们想注入类的时候,直接注解就可以了。
<!-- 自动扫描与装配 --><context:component-scanbase-package="com.forlink"></context:component-scan>
依赖注入
@Resource
@Autowired
@Qualifier
类扫描
@Component
@Controller
@Repository
@Service
几种方法的优劣都很明显,配置文件的方法加载速度很快,但是写起来很麻烦,而且有些属性不适合注入。
注解的方式很方便,用起来很爽,但是加载速度稍慢。我们公司现在用的就是自动扫描注解的方式实现的。
控制反转和依赖注入就是面向接口编程,松耦合编程。