提到Spring,根据自我理解跟各种资料先提到的就是IOC与AOP,即控制反转与面向切面,提供MVC及JDBC以及事务管理的技术,并容易与其他的框架整合。
一、Spring的优点
1、方便解耦,简化开发。通过Spring提供的IOC容器,可以将对象之间的依赖关系交由Spring进行控制,避免代码造成的过度耦合。
2、AOP编程的支持。通过Spring的AOP功能,方便进行面向切面编程。
3、声明式事物支持。通过声明方式进行事物管理,提高开发效率和质量。
4、方便程序的测试。可以用非容器依赖的编程方式进行几乎所有的测试工作。
5、方便集成各种优秀框架。Spring提供对各种框架的直接支持。
6、降低JavaEE API的使用难度。
7、Java源码是经典的学习范例。
二、Spring的体系结构
1、IOC
将类与类的关系从代码中脱离出来,用配置的方式进行依赖关系描述。BeanFactory接口是Sping框架的核心接口,实现容器的核心功能。Context模块构建于核心模块之上,扩展BeanFactory的功能。ApplicationContext接口是Context模块的核心接口。
2、AOP模块
3、数据访问和集成
4、Web及远程操作
该模块建立在Application Context模块之上,提供Web应用的各种工具类。
5、Web及远程访问
提供一个完成的类似Struts的MVC框架。
三、IOC
给出IOC三种注入的类型。
首先的有接口,然后有类继承接口。
public interface Person {
void sayHello();
}
public class Chinese implements Person{
public void sayHello() {
System.out.println("你好");
}
}
public class America implements Person{
public void sayHello() {
System.out.println("How do you do");
}
}
构造函数:
public class User {
private Person p;
public User(Person p){
this.p = p;
}
public void function(){
this.p.sayHello();
}
}
public class Container {
public static User getBean(){
Person p = new Chinese();
User user = new User(p);
return user;
}
}
属性注入
public class User {
private Person p;
public void setPerson(Person p){
this.p = p;
}
public void function(){
this.p.sayHello();
}
}
public class Container {
public static User getBean(){
Person p = new Chinese();
User user = new User();
user.setPerson(p);
return user;
}
}
接口注入
public interface UserIn {
void inject(Person p);
}
public class User1 implements UserIn{
private Person p;
public void function(){
this.p.sayHello();
}
public void inject(Person p) {
this.p = p;
}
}
public class Container {
public static User1 getBean(){
// TODO Auto-generated method stub
Person p = new Chinese();
User1 user = new User1();
user.inject(p);
return user;
}
}
然后最后调用模块的函数
public class Test {
public static void main(String[] args){
User user = Container.getBean();
user.function();
}
}
基本上就是这样,代码的实例很简单,然后就是如何结合到Spring中,在这之前首先补充反射的知识。
三、Spring简单的持久层
1、领域对象
即称为实体类,也就是Bean对象。属于业务层,但是贯穿在展现层,业务层以及持久层。主要工作是从数据库表中加载数据并实例化领域对象,或者将领域对象持久化到数据库中