Spring框架--IOC
对于Spring框架,就像它的创始人Rod Johnson说的一样“Spring存在的目的就是使得已经存在的技术用起来更加的简单”,例如它可以整合持久层框架Mybatis,Hinernate、也可以整合web框架SpringMVC和struts2等一样,它使得我们框架的整合变得更加的易于操作。
Spring分层主要分为:
M(Module)持久层如:JDBC、Mybatis,Hibernate,SpringData等;
V(View)视图层如:SpringMVC;
C(Service)服务层如:Spring,Struts2等;
它的特点主要有六个:
1.解耦、简化开发、
2.大工厂。对所有对象的创建和依赖关系进行维护。
3.AOP编程。面向切面的思想相较于oop(面向对象的编程)来说,使得编程易于入手。
4.事务支持。也就是说不论是对象的创建,依赖关系的维护还是事务的管理都交由框架来管理。
5.易于集成各种优秀的框架。
6.降低了JAVAEE API的使用难度。
一 IOC的本质就是将对象的创建权交给Spring,那么它到底反转的是什么呢?其实就像DI的提出这说的那样,控制反转实质上说的就是对象的注入从主动变成了主动,所以说IOC与DI实际上是从不同的角度描述的是一件事情。
一个Spring测试项目的创建主要分为以下几部(本文以idea为例):、
1.pom引入包,相当与eclipse中的导包操作。
2.编写接口及其实现类。、
3.核心文件的配置,配置文件默认的名字是applicationContext.xml。
4.编写测试类进行测试。
对于3.中的核心文件的配置来说:内部使用IOC的思想来创建对象如并且默认使用单例模式:
id代表的是你所要创建这个对象的名字 此处以userDao为例。
class代表的是你创建的这个对象的类的实现类的全路径 ,此处以com.qf.Dao.UserDaoImpl为例。
在这个bean里面还有其它的属性例如:
init-Method:可以通过这个属性来定以初始化方法;
destory-Method:可以通过这个属性来定以销毁方法;
scope:可以用来声明是单例还是多例子,如果是但例那么每次得到的对像是同一个对象(他们hashcode是一样的),如果是多例每次的到的都是不同的对象。
其实bean的管理就是对象的管理。
对于4.的测试来说,可以通过classPathXmlApplicationContext这个类来加载核心配置文件
加载之后得到一个对象context(对象的名字可以自己命名),利用这个对象的getBean("id")方法来的到具体的对象;
其中的id指的就是之前配置文件中提到的
二 DI 依赖注入(Dependency Injection)
依赖注入有两种方式setter注入和构造方法注入。
1.setter注入
对于这种注入方法来说:首先你需要在你用到对象的类中做对象的声明,作为这个类的一个属性,然后为其提供Setter方法。
然后在配置文件中:在这个属性所在类对应的
对于property这个标签格式如下(这个标签完成的基于是对象的注入):
id指的是这个对象作为属性存在于类中的属性名
ref指的是在配置文件中另一个
这个属性的注入默认用的就是自己外部所对应
此处做一个扩展,配置文件是怎么反射的,其实在框架里面有一个对象工厂类的名字是BeanFactory它里面提供了很多的方法来得到对象以及类型等。
如getBean(String name)根据名字来获取对象
class> getType(String name)根据名字来获取类型;
Ojbect getBean(String name,Obiect...args)根据name+参数来获取对象;
还有一些判断的方法如:
containBean(String name) 判断是否有这个类;
isPrototype(String name) 判断产生对象是否是多例;
isSingleton(String name)判断产生对象是否是单例;
2.构造方法注入
首先把对应的对象那属性写在对应类的构造方法之中。相当于有参构造。
主要有两种注入的方式分别是名称赋值和索引赋值:
若是变量属性则名称赋值的格式为:在某个
同样name指的是属性的名称,value指的是这个属性的值。
若是对象作为属性则这个里面不能再用value则应该用ref它的值就是其它bean的id值;
同样对于索引赋值来说:标签内部是index 和 value index的值是更具它在对应类中的顺序来决定的,索引从0开始;
3.集合数组注入
对于数组来说:在其所属的类对应的
对于集合来说:
集合主要有list,set,map,propertise(属性文件)
list:
set:
map:
propertise:
.....
3.注解开发
注解的特点:减少了配置,注解直接写在类中;
注解并不能解决所有的问题,如每次修改后需要重新编译。
注解测试主要分为五步:
在核心配置文件中引入约束;
添加注解:最主要的一个注解是@Component(此处的内容相当于bean中的id的内容)相当于配置文件中的
在它之下有衍生了具体的注解如服务层用的就是@Service,持久层用的是@Repository等
对于一般的类型的变量用@Value(变量的值)
对于对像两个@Autowire自动类型注入、@Qualifire("")按名称创建对象。
在核心配置文件中开启注解扫描:
最后编写测试类进行测试。
注意:但凡在某个包的某个类中加了注解,就瑶将这个包开启注解扫描,否则会发生错误。
下篇文章将为大家说明另一个核心AOP,敬请关注!
版权声明:本文为博主原创文章,未经博主允许不得转载。